review 4.1.0 → 5.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (259) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby-tex.yml +35 -0
  3. data/.github/workflows/ruby-win.yml +19 -9
  4. data/.github/workflows/ruby.yml +7 -3
  5. data/.rubocop.yml +138 -34
  6. data/NEWS.ja.md +285 -0
  7. data/NEWS.md +285 -1
  8. data/README.md +7 -6
  9. data/Rakefile +7 -2
  10. data/bin/review +2 -4
  11. data/bin/review-catalog-converter +4 -4
  12. data/bin/review-check +8 -12
  13. data/bin/review-checkdep +2 -5
  14. data/bin/review-compile +18 -34
  15. data/bin/review-epub2html +1 -4
  16. data/bin/review-epubmaker +3 -4
  17. data/bin/review-idgxmlmaker +1 -3
  18. data/bin/review-index +5 -86
  19. data/bin/review-init +1 -4
  20. data/bin/review-pdfmaker +1 -3
  21. data/bin/review-preproc +30 -38
  22. data/bin/review-textmaker +1 -3
  23. data/bin/review-update +1 -4
  24. data/bin/review-validate +4 -4
  25. data/bin/review-vol +5 -82
  26. data/bin/review-webmaker +1 -3
  27. data/doc/config.yml.sample +45 -11
  28. data/doc/config.yml.sample-simple +3 -3
  29. data/doc/format.ja.md +103 -13
  30. data/doc/format.md +104 -16
  31. data/doc/makeindex.ja.md +2 -2
  32. data/doc/pdfmaker.ja.md +42 -0
  33. data/doc/pdfmaker.md +41 -0
  34. data/doc/quickstart.ja.md +19 -6
  35. data/doc/quickstart.md +18 -6
  36. data/doc/writing_vertical.ja.md +6 -0
  37. data/lib/review.rb +1 -1
  38. data/lib/review/book.rb +2 -2
  39. data/lib/review/book/base.rb +67 -29
  40. data/lib/review/book/bib.rb +21 -0
  41. data/lib/review/book/book_unit.rb +158 -0
  42. data/lib/review/book/chapter.rb +33 -26
  43. data/lib/review/book/index.rb +24 -185
  44. data/lib/review/book/index/item.rb +7 -1
  45. data/lib/review/book/page_metric.rb +7 -7
  46. data/lib/review/book/part.rb +26 -11
  47. data/lib/review/book/volume.rb +5 -5
  48. data/lib/review/builder.rb +121 -52
  49. data/lib/review/call_hook.rb +20 -0
  50. data/lib/review/catalog.rb +3 -2
  51. data/lib/review/compiler.rb +230 -111
  52. data/lib/review/configure.rb +91 -7
  53. data/lib/review/converter.rb +1 -1
  54. data/lib/review/epub2html.rb +6 -1
  55. data/lib/review/epubmaker.rb +124 -152
  56. data/lib/review/epubmaker/content.rb +113 -0
  57. data/lib/review/epubmaker/epubcommon.rb +372 -0
  58. data/lib/review/epubmaker/epubv2.rb +178 -0
  59. data/lib/review/epubmaker/epubv3.rb +231 -0
  60. data/lib/review/epubmaker/producer.rb +167 -0
  61. data/lib/review/epubmaker/reviewheaderlistener.rb +12 -2
  62. data/lib/review/epubmaker/zip_exporter.rb +84 -0
  63. data/lib/review/exception.rb +13 -0
  64. data/lib/review/htmlbuilder.rb +176 -89
  65. data/lib/review/htmlutils.rb +8 -11
  66. data/lib/review/i18n.rb +2 -1
  67. data/lib/review/idgxmlbuilder.rb +165 -75
  68. data/lib/review/idgxmlmaker.rb +24 -28
  69. data/lib/review/img_math.rb +238 -0
  70. data/lib/review/index_builder.rb +645 -0
  71. data/lib/review/init.rb +9 -17
  72. data/lib/review/latexbox.rb +58 -0
  73. data/lib/review/latexbuilder.rb +193 -75
  74. data/lib/review/latexutils.rb +9 -1
  75. data/lib/review/lineinput.rb +112 -2
  76. data/lib/review/loggable.rb +27 -0
  77. data/lib/review/logger.rb +90 -3
  78. data/lib/review/makerhelper.rb +17 -188
  79. data/lib/review/markdownbuilder.rb +54 -4
  80. data/lib/review/pdfmaker.rb +76 -84
  81. data/lib/review/plaintextbuilder.rb +106 -22
  82. data/lib/review/preprocessor.rb +107 -303
  83. data/lib/review/preprocessor/directive.rb +35 -0
  84. data/lib/review/preprocessor/line.rb +34 -0
  85. data/lib/review/preprocessor/repository.rb +177 -0
  86. data/lib/review/rstbuilder.rb +27 -8
  87. data/lib/review/sec_counter.rb +14 -0
  88. data/lib/review/template.rb +11 -1
  89. data/lib/review/textmaker.rb +27 -32
  90. data/lib/review/textutils.rb +3 -12
  91. data/lib/review/tocprinter.rb +242 -97
  92. data/lib/review/topbuilder.rb +98 -31
  93. data/lib/review/update.rb +12 -13
  94. data/lib/review/version.rb +1 -1
  95. data/lib/review/volumeprinter.rb +97 -0
  96. data/lib/review/webmaker.rb +40 -47
  97. data/lib/review/webtocprinter.rb +39 -35
  98. data/lib/review/yamlloader.rb +2 -1
  99. data/review.gemspec +5 -3
  100. data/samples/sample-book/src/config-epub2.yml +1 -1
  101. data/samples/sample-book/src/config.yml +3 -3
  102. data/samples/sample-book/src/lib/tasks/review.rake +19 -1
  103. data/samples/sample-book/src/lib/tasks/z01_copy_sty.rake +2 -1
  104. data/samples/syntax-book/Gemfile +1 -1
  105. data/samples/syntax-book/ch01.re +1 -1
  106. data/samples/syntax-book/ch02.re +21 -6
  107. data/samples/syntax-book/ch03.re +1 -1
  108. data/samples/syntax-book/config.yml +1 -1
  109. data/samples/syntax-book/images/img3-2.png +0 -0
  110. data/samples/syntax-book/lib/tasks/z01_copy_sty.rake +2 -1
  111. data/templates/html/_colophon.html.erb +23 -0
  112. data/templates/html/_colophon_history.html.erb +9 -0
  113. data/templates/html/_cover.html.erb +10 -0
  114. data/templates/html/_part_body.html.erb +6 -0
  115. data/templates/html/_titlepage.html.erb +20 -0
  116. data/templates/html/layout-html5.html.erb +6 -0
  117. data/templates/html/layout-xhtml1.html.erb +6 -0
  118. data/templates/latex/config.erb +35 -23
  119. data/templates/latex/review-jlreq/README.md +3 -1
  120. data/templates/latex/review-jlreq/review-base.sty +36 -23
  121. data/templates/latex/review-jlreq/review-jlreq.cls +18 -25
  122. data/templates/latex/review-jlreq/review-style.sty +6 -1
  123. data/templates/latex/review-jlreq/review-tcbox.sty +348 -0
  124. data/templates/latex/review-jlreq/reviewmacro.sty +5 -0
  125. data/templates/latex/review-jsbook/README.md +7 -5
  126. data/templates/latex/review-jsbook/review-base.sty +40 -24
  127. data/templates/latex/review-jsbook/review-jsbook.cls +13 -3
  128. data/templates/latex/review-jsbook/review-style.sty +6 -1
  129. data/templates/latex/review-jsbook/review-tcbox.sty +348 -0
  130. data/templates/latex/review-jsbook/reviewmacro.sty +5 -0
  131. data/templates/opf/epubv2.opf.erb +7 -7
  132. data/templates/opf/epubv3.opf.erb +7 -7
  133. data/templates/opf/opf_manifest_epubv2.opf.erb +10 -0
  134. data/templates/opf/opf_manifest_epubv3.opf.erb +10 -0
  135. data/templates/opf/opf_metainfo_epubv2.opf.erb +17 -0
  136. data/templates/opf/opf_metainfo_epubv3.opf.erb +49 -0
  137. data/templates/opf/opf_tocx_epubv2.opf.erb +9 -0
  138. data/templates/opf/opf_tocx_epubv3.opf.erb +17 -0
  139. data/templates/web/html/layout-html5.html.erb +9 -8
  140. data/templates/web/html/layout-xhtml1.html.erb +6 -0
  141. data/test/assets/header_listener.html +35 -0
  142. data/test/assets/img_math/img1.png +0 -0
  143. data/test/assets/img_math/img2.png +0 -0
  144. data/test/assets/img_math/img3.png +0 -0
  145. data/test/assets/syntax_book_index_detail.txt +58 -0
  146. data/test/assets/test_template.tex +6 -3
  147. data/test/assets/test_template_backmatter.tex +6 -3
  148. data/test/book_test_helper.rb +11 -5
  149. data/test/run_test.rb +1 -1
  150. data/test/test_book.rb +54 -63
  151. data/test/test_book_chapter.rb +95 -54
  152. data/test/test_book_part.rb +3 -3
  153. data/test/test_builder.rb +29 -20
  154. data/test/test_catalog_converter_cmd.rb +1 -1
  155. data/test/test_converter.rb +1 -0
  156. data/test/test_epub3maker.rb +170 -126
  157. data/test/test_epubmaker.rb +254 -129
  158. data/test/test_epubmaker_cmd.rb +15 -4
  159. data/test/test_helper.rb +12 -5
  160. data/test/test_htmlbuilder.rb +926 -76
  161. data/test/test_htmlutils.rb +0 -12
  162. data/test/test_i18n.rb +33 -33
  163. data/test/test_idgxmlbuilder.rb +531 -20
  164. data/test/test_idgxmlmaker_cmd.rb +7 -3
  165. data/test/test_img_math.rb +111 -0
  166. data/test/test_index.rb +62 -52
  167. data/test/test_indexbuilder.rb +52 -0
  168. data/test/test_latexbuilder.rb +891 -20
  169. data/test/test_latexbuilder_v2.rb +56 -10
  170. data/test/test_lineinput.rb +20 -93
  171. data/test/test_logger.rb +7 -7
  172. data/test/test_makerhelper.rb +0 -12
  173. data/test/test_markdownbuilder.rb +32 -0
  174. data/test/test_pdfmaker.rb +100 -11
  175. data/test/test_pdfmaker_cmd.rb +3 -3
  176. data/test/test_plaintextbuilder.rb +546 -32
  177. data/test/test_preprocessor.rb +188 -1
  178. data/test/test_review_ext.rb +2 -1
  179. data/test/test_reviewheaderlistener.rb +49 -0
  180. data/test/test_rstbuilder.rb +25 -1
  181. data/test/test_sec_counter.rb +156 -0
  182. data/test/test_template.rb +12 -2
  183. data/test/test_textmaker_cmd.rb +5 -1
  184. data/test/test_tocprinter.rb +46 -0
  185. data/test/test_topbuilder.rb +324 -20
  186. data/test/test_update.rb +44 -44
  187. data/test/test_webtocprinter.rb +75 -43
  188. data/test/test_zip_exporter.rb +5 -6
  189. data/vendor/gentombow/LICENSE +1 -1
  190. data/vendor/gentombow/Makefile +0 -1
  191. data/vendor/gentombow/bounddvi-en.pdf +0 -0
  192. data/vendor/gentombow/bounddvi-en.tex +1 -0
  193. data/vendor/gentombow/bounddvi.pdf +0 -0
  194. data/vendor/gentombow/bounddvi.sty +30 -7
  195. data/vendor/gentombow/bounddvi.tex +1 -0
  196. data/vendor/gentombow/create_archive.sh +1 -0
  197. data/vendor/gentombow/gentombow-ja.pdf +0 -0
  198. data/vendor/gentombow/gentombow-ja.tex +9 -0
  199. data/vendor/gentombow/gentombow.pdf +0 -0
  200. data/vendor/gentombow/gentombow.sty +32 -10
  201. data/vendor/gentombow/gentombow.tex +8 -0
  202. data/vendor/gentombow/tests/gentombow-01-pdfx.tex +8 -0
  203. data/vendor/gentombow/tests/gentombow-02-pdfx.tex +8 -0
  204. data/vendor/jsclasses/Makefile +3 -2
  205. data/vendor/jsclasses/create_archive.sh +5 -5
  206. data/vendor/jsclasses/jis/Makefile +3 -2
  207. data/vendor/jsclasses/jis/jsarticle.cls +22 -18
  208. data/vendor/jsclasses/jis/jsbook.cls +22 -18
  209. data/vendor/jsclasses/jis/jsclasses.dtx +94 -13
  210. data/vendor/jsclasses/jis/jsclasses.ins +15 -5
  211. data/vendor/jsclasses/jis/jslogo.ins +9 -0
  212. data/vendor/jsclasses/jis/jslogo.sty +1 -13
  213. data/vendor/jsclasses/jis/jspf.cls +22 -18
  214. data/vendor/jsclasses/jis/jsreport.cls +22 -18
  215. data/vendor/jsclasses/jis/jsverb.ins +9 -0
  216. data/vendor/jsclasses/jis/jsverb.sty +1 -13
  217. data/vendor/jsclasses/jis/kiyou.cls +22 -18
  218. data/vendor/jsclasses/jis/minijs.sty +65 -22
  219. data/vendor/jsclasses/jis/okumacro.ins +9 -0
  220. data/vendor/jsclasses/jis/okumacro.sty +1 -13
  221. data/vendor/jsclasses/jis/okuverb.ins +9 -0
  222. data/vendor/jsclasses/jis/okuverb.sty +1 -13
  223. data/vendor/jsclasses/jis/winjis.sty +23 -19
  224. data/vendor/jsclasses/jsarticle.cls +22 -18
  225. data/vendor/jsclasses/jsbook.cls +22 -18
  226. data/vendor/jsclasses/jsclasses.dtx +94 -13
  227. data/vendor/jsclasses/jsclasses.ins +15 -5
  228. data/vendor/jsclasses/jsclasses.pdf +0 -0
  229. data/vendor/jsclasses/jslogo.ins +9 -0
  230. data/vendor/jsclasses/jslogo.pdf +0 -0
  231. data/vendor/jsclasses/jslogo.sty +1 -13
  232. data/vendor/jsclasses/jspf.cls +22 -18
  233. data/vendor/jsclasses/jsreport.cls +22 -18
  234. data/vendor/jsclasses/jsverb.ins +9 -0
  235. data/vendor/jsclasses/jsverb.pdf +0 -0
  236. data/vendor/jsclasses/jsverb.sty +1 -13
  237. data/vendor/jsclasses/kiyou.cls +22 -18
  238. data/vendor/jsclasses/minijs.sty +68 -22
  239. data/vendor/jsclasses/okumacro.ins +9 -0
  240. data/vendor/jsclasses/okumacro.pdf +0 -0
  241. data/vendor/jsclasses/okumacro.sty +1 -13
  242. data/vendor/jsclasses/okuverb.ins +9 -0
  243. data/vendor/jsclasses/okuverb.pdf +0 -0
  244. data/vendor/jsclasses/okuverb.sty +1 -13
  245. data/vendor/jsclasses/tests/relfont.tex +10 -0
  246. data/vendor/jsclasses/winjis.sty +23 -19
  247. metadata +106 -22
  248. data/.rubocop_todo.yml +0 -7
  249. data/lib/epubmaker.rb +0 -23
  250. data/lib/epubmaker/content.rb +0 -110
  251. data/lib/epubmaker/epubcommon.rb +0 -441
  252. data/lib/epubmaker/epubv2.rb +0 -143
  253. data/lib/epubmaker/epubv3.rb +0 -233
  254. data/lib/epubmaker/producer.rb +0 -375
  255. data/lib/epubmaker/zip_exporter.rb +0 -81
  256. data/lib/lineinput.rb +0 -155
  257. data/lib/review/book/compilable.rb +0 -178
  258. data/lib/review/tocparser.rb +0 -275
  259. data/test/test_tocparser.rb +0 -25
data/README.md CHANGED
@@ -62,11 +62,12 @@ $ echo "export PATH=PATH_OF_REVIEW/bin:$PATH" >> ~/.profile
62
62
  $ review-init hello
63
63
  $ cd hello
64
64
  $ (... add and edit *.re file, config.yml and catalog.yml ...)
65
- $ rake epub ## generating EPUB
66
- $ rake pdf ## generating PDF (Requirement TeXLive)
67
- $ rake text ## generating texts
68
- $ rake web ## generating Web pages
69
- $ rake idgxml ## generating InDesign XML files
65
+ $ rake epub ## generating EPUB
66
+ $ rake pdf ## generating PDF (Requirement TeXLive)
67
+ $ rake text ## generating texts
68
+ $ rake web ## generating Web pages
69
+ $ rake idgxml ## generating InDesign XML files
70
+ $ rake vivliostyle ## generating PDF using Vivliostyle-CLI (Requirement Vivliostyle-CLI)
70
71
  ```
71
72
 
72
73
  For further information, see [doc/quickstart.md](https://github.com/kmuto/review/blob/master/doc/quickstart.md)
@@ -115,4 +116,4 @@ Exception:
115
116
 
116
117
  ## Copyright
117
118
 
118
- Copyright (c) 2006-2020 Minero Aoki, Kenshi Muto, Masayoshi Takahashi, Masanori Kado.
119
+ Copyright (c) 2006-2021 Minero Aoki, Kenshi Muto, Masayoshi Takahashi, Masanori Kado.
data/Rakefile CHANGED
@@ -21,8 +21,13 @@ task :rubocop do
21
21
  end
22
22
  end
23
23
 
24
- task :test do
25
- ruby('test/run_test.rb')
24
+ desc 'Run tests'
25
+ task :test, :target do |_, argv|
26
+ if argv[:target].nil?
27
+ ruby('test/run_test.rb')
28
+ else
29
+ ruby('test/run_test.rb', "--pattern=#{argv[:target]}")
30
+ end
26
31
  end
27
32
 
28
33
  begin
data/bin/review CHANGED
@@ -13,9 +13,7 @@
13
13
  # the GNU LGPL, Lesser General Public License version 2.1.
14
14
  # For details of the GNU LGPL, see the file "COPYING".
15
15
 
16
- require 'pathname'
17
- bindir = Pathname.new(__FILE__).realpath.dirname
18
- $LOAD_PATH.unshift((bindir + '../lib').realpath)
16
+ $LOAD_PATH.unshift(File.realpath('../lib', __dir__))
19
17
 
20
18
  require 'review'
21
19
 
@@ -52,7 +50,7 @@ if ARGV[0] == 'version'
52
50
  end
53
51
 
54
52
  command = "review-#{ARGV.shift}"
55
- bindir = Pathname.new(__FILE__).realpath.dirname
53
+ bindir = File.realpath(__dir__)
56
54
  command_path = File.join(bindir, command)
57
55
 
58
56
  unless File.exist?(command_path)
@@ -9,10 +9,9 @@
9
9
  #
10
10
  # Convert old PREDEF/CHAPS/PART/POSTDEF files into catalog.yml.
11
11
 
12
- require 'pathname'
12
+ $LOAD_PATH.unshift(File.realpath('../lib', __dir__))
13
+
13
14
  require 'optparse'
14
- bindir = Pathname.new(__FILE__).realpath.dirname
15
- $LOAD_PATH.unshift((bindir + '../lib').realpath)
16
15
  require 'review/version'
17
16
  require 'review/extentions'
18
17
  require 'review/logger'
@@ -109,7 +108,7 @@ def parse_postdef(str, to_appendix = false)
109
108
  end
110
109
 
111
110
  def parse_parts(parts_str, chaps_str)
112
- if parts_str.blank? or chaps_str.blank?
111
+ if parts_str.blank? || chaps_str.blank?
113
112
  return "CHAPS:\n\n"
114
113
  end
115
114
 
@@ -158,6 +157,7 @@ def replace_old_style_part(dir)
158
157
  end
159
158
 
160
159
  next unless allow_overwrite
160
+
161
161
  File.write("#{dir}/#{part_name}", "= #{part}")
162
162
  catalog.replace_part(part, part_name)
163
163
  end
data/bin/review-check CHANGED
@@ -9,10 +9,7 @@
9
9
  # For details of the GNU LGPL, see the file "COPYING".
10
10
  #
11
11
 
12
- require 'pathname'
13
-
14
- bindir = Pathname.new(__FILE__).realpath.dirname
15
- $LOAD_PATH.unshift((bindir + '../lib').realpath)
12
+ $LOAD_PATH.unshift(File.realpath('../lib', __dir__))
16
13
 
17
14
  require 'review'
18
15
  require 'optparse'
@@ -31,9 +28,7 @@ end
31
28
 
32
29
  def main
33
30
  @config = ReVIEW::Configure.values
34
- @book = ReVIEW::Book::Base.load
35
- @book.config = @config
36
-
31
+ @book = ReVIEW::Book::Base.new(config: @config)
37
32
  @logger = ReVIEW.logger
38
33
 
39
34
  modes = nil
@@ -87,7 +82,8 @@ def check_text(files)
87
82
  s = para.join
88
83
  m = re.match(s)
89
84
  next if m.nil? || m[0] == @review_utils_word_ok
90
- next if neg and neg =~ s
85
+ next if neg && neg =~ s
86
+
91
87
  str, offset = find_line(para, re)
92
88
  out = sprintf("%s:%d: %s\n", path, lineno + offset, str)
93
89
  print out
@@ -109,6 +105,7 @@ def find_line(lines, re)
109
105
  while i < lines.size - 1
110
106
  str = lines[i] + lines[i + 1]
111
107
  return str.gsub(re, '<<<\&>>>'), i if re =~ str
108
+
112
109
  i += 1
113
110
  end
114
111
 
@@ -120,6 +117,7 @@ def words_re(rc)
120
117
  nega = []
121
118
  File.foreach(rc) do |line|
122
119
  next if line[0, 1] == '#'
120
+
123
121
  if / !/ =~ line
124
122
  line, n = *line.split('!', 2)
125
123
  nega.push(n.strip)
@@ -136,7 +134,7 @@ def each_paragraph(f)
136
134
  case line
137
135
  when /\A\#@ok\((.*)\)/
138
136
  @review_utils_word_ok = $1
139
- when /\A\#@/
137
+ when /\A\#@/, /\A\s*\z/
140
138
  # do nothing
141
139
  next
142
140
  when %r{\A//caption\{(.*?)//\}}
@@ -147,9 +145,6 @@ def each_paragraph(f)
147
145
  end
148
146
  when /\A=/
149
147
  yield [line.slice(/\A=+(?:\[.*?\])?\s+(.*)/, 1).strip], f.lineno
150
- when /\A\s*\z/
151
- # skip
152
- next
153
148
  else
154
149
  buf = [line.strip]
155
150
  lineno = f.lineno
@@ -157,6 +152,7 @@ def each_paragraph(f)
157
152
  break if line.strip.empty?
158
153
  break if %r{\A(?:=|//[\w\}])} =~ line
159
154
  next if /\A\#@/ =~ line
155
+
160
156
  buf.push(line.strip)
161
157
  end
162
158
  yield buf, lineno
data/bin/review-checkdep CHANGED
@@ -9,10 +9,7 @@
9
9
  # For details of the GNU LGPL, see the file "COPYING".
10
10
  #
11
11
 
12
- require 'pathname'
13
-
14
- bindir = Pathname.new(__FILE__).realpath.dirname
15
- $LOAD_PATH.unshift((bindir + '../lib').realpath)
12
+ $LOAD_PATH.unshift(File.realpath('../lib', __dir__))
16
13
 
17
14
  PREDEF_FILE = 'PREDEF'.freeze
18
15
 
@@ -30,7 +27,7 @@ def main
30
27
  when /\A\#@provide\((.*)\)/
31
28
  provide($1)
32
29
  else
33
- line.scan(/@<kw>\{(.*?)[,\}]/) { provide $1 }
30
+ line.scan(/@<kw>\{(.*?)[,}]/) { provide($1) }
34
31
  end
35
32
  end
36
33
  end
data/bin/review-compile CHANGED
@@ -9,16 +9,15 @@
9
9
  # For details of the GNU LGPL, see the file "COPYING".
10
10
  #
11
11
 
12
- require 'pathname'
13
-
14
- bindir = Pathname.new(__FILE__).realpath.dirname
15
- $LOAD_PATH.unshift((bindir + '../lib').realpath)
12
+ $LOAD_PATH.unshift(File.realpath('../lib', __dir__))
16
13
 
17
14
  require 'review'
18
15
  require 'fileutils'
19
16
  require 'optparse'
20
17
  require 'yaml'
21
18
 
19
+ include ReVIEW::Loggable
20
+
22
21
  DEFAULT_CONFIG_FILENAME = 'config.yml'.freeze
23
22
 
24
23
  def main
@@ -50,17 +49,17 @@ def _main
50
49
  begin
51
50
  loader = ReVIEW::YAMLLoader.new
52
51
  if @config['yaml']
53
- error "#{@config['yaml']} not found." unless File.exist?(@config['yaml'])
52
+ error! "#{@config['yaml']} not found." unless File.exist?(@config['yaml'])
54
53
  begin
55
54
  @config.deep_merge!(loader.load_file(@config['yaml']))
56
55
  rescue => e
57
- error "yaml error #{e.message}"
56
+ error! "yaml error #{e.message}"
58
57
  end
59
58
  elsif File.exist?(DEFAULT_CONFIG_FILENAME)
60
59
  begin
61
60
  @config.deep_merge!(loader.load_file(DEFAULT_CONFIG_FILENAME))
62
61
  rescue => e
63
- error "yaml error #{e.message}"
62
+ error! "yaml error #{e.message}"
64
63
  end
65
64
  end
66
65
 
@@ -76,41 +75,39 @@ def _main
76
75
 
77
76
  case @mode
78
77
  when :files
79
- error('no input') if ARGV.empty?
78
+ error!('no input') if ARGV.empty?
80
79
 
81
80
  @basedir = File.dirname(ARGV[0])
82
- book = ReVIEW::Book::Base.load(@basedir)
83
- book.config = @config # needs only at the first time
81
+ book = ReVIEW::Book::Base.new(@basedir, config: @config)
84
82
  ARGV.each do |item|
85
- error("file not found: #{item}") unless File.exist?(File.join(book.config['contentdir'], item))
83
+ error!("file not found: #{item}") unless File.exist?(File.join(book.config['contentdir'], item))
86
84
  chap_name = File.basename(item, '.*')
87
85
  chap = book.chapter(chap_name)
88
- compiler = ReVIEW::Compiler.new(load_strategy_class(@target, @check_only))
86
+ compiler = ReVIEW::Compiler.new(load_builder_class(@target, @check_only))
89
87
  result = compiler.compile(chap)
90
88
  if @output_filename
91
- write(@output_filename, result)
89
+ File.write(@output_filename, result)
92
90
  else
93
91
  puts result unless @check_only
94
92
  end
95
93
  end
96
94
  when :dir
97
- book = @basedir ? ReVIEW::Book.load(@basedir) : ReVIEW::Book::Base.load
98
- book.config = @config
99
- compiler = ReVIEW::Compiler.new(load_strategy_class(@target, @check_only))
95
+ book = @basedir ? ReVIEW::Book::Base.new(@basedir, config: @config) : ReVIEW::Book::Base.new(config: @config)
96
+ compiler = ReVIEW::Compiler.new(load_builder_class(@target, @check_only))
100
97
  book.chapters.each do |chap|
101
98
  str = compiler.compile(chap)
102
- write("#{chap.name}#{compiler.strategy.extname}", str) unless @check_only
99
+ File.write("#{chap.name}#{compiler.builder.extname}", str) unless @check_only
103
100
  end
104
101
  # PART
105
102
  book.parts_in_file.each do |part|
106
103
  str = compiler.compile(part)
107
- write("#{part.name}#{compiler.strategy.extname}", str) unless @check_only
104
+ File.write("#{part.name}#{compiler.builder.extname}", str) unless @check_only
108
105
  end
109
106
  else
110
107
  raise "must not happen: #{@mode}"
111
108
  end
112
109
  rescue ReVIEW::ApplicationError => e
113
- error(e.message)
110
+ error! e.message
114
111
  end
115
112
  end
116
113
 
@@ -128,7 +125,7 @@ def parse_opts
128
125
  opts.on('--chapref="before,middle,after"', 'Chapref decoration. (idgxml)') { |cdec| @config['chapref'] = cdec }
129
126
  opts.on('--chapterlink', 'make chapref hyperlink') { @config['chapterlink'] = true }
130
127
  opts.on('--stylesheet=file', 'Stylesheet file for HTML (comma separated)') { |files| @config['stylesheet'] = files.split(/\s*,\s*/) }
131
- opts.on('--mathml', 'Use MathML for TeX equation in HTML') { @config['mathml'] = true }
128
+ opts.on('--mathml', 'Use MathML for TeX equation in HTML') { @config['math_format'] = 'mathml' }
132
129
  opts.on('--htmlversion=VERSION', 'HTML version.') do |v|
133
130
  v = v.to_i
134
131
  @config['htmlversion'] = v if [4, 5].include?(v)
@@ -169,22 +166,9 @@ def parse_opts
169
166
  end
170
167
  end
171
168
 
172
- def error(msg)
173
- @logger.error msg
174
- exit 1
175
- end
176
-
177
- def warn(msg)
178
- @logger.warn msg
179
- end
180
-
181
- def load_strategy_class(target, strict)
169
+ def load_builder_class(target, strict)
182
170
  require "review/#{target}builder"
183
171
  ReVIEW.const_get("#{target.upcase}Builder").new(strict)
184
172
  end
185
173
 
186
- def write(path, str)
187
- File.open(path, 'w') { |f| f.puts str }
188
- end
189
-
190
174
  main
data/bin/review-epub2html CHANGED
@@ -7,10 +7,7 @@
7
7
  # the GNU LGPL, Lesser General Public License version 2.1.
8
8
  # For details of the GNU LGPL, see the file "COPYING".
9
9
 
10
- require 'pathname'
11
-
12
- bindir = Pathname.new(__FILE__).realpath.dirname
13
- $LOAD_PATH.unshift((bindir + '../lib').realpath)
10
+ $LOAD_PATH.unshift(File.realpath('../lib', __dir__))
14
11
 
15
12
  require 'review/epub2html'
16
13
 
data/bin/review-epubmaker CHANGED
@@ -6,11 +6,10 @@
6
6
  # the GNU LGPL, Lesser General Public License version 2.1.
7
7
  # For details of the GNU LGPL, see the file "COPYING".
8
8
  #
9
- require 'pathname'
10
- require 'optparse'
11
- bindir = Pathname.new(__FILE__).realpath.dirname
12
- $LOAD_PATH.unshift((bindir + '../lib').realpath)
13
9
 
10
+ $LOAD_PATH.unshift(File.realpath('../lib', __dir__))
11
+
12
+ require 'optparse'
14
13
  require 'review/epubmaker'
15
14
 
16
15
  ReVIEW::EPUBMaker.execute(*ARGV)
@@ -7,9 +7,7 @@
7
7
  # For details of the GNU LGPL, see the file "COPYING".
8
8
  #
9
9
 
10
- require 'pathname'
11
- bindir = Pathname.new(__FILE__).realpath.dirname
12
- $LOAD_PATH.unshift((bindir + '../lib').realpath)
10
+ $LOAD_PATH.unshift(File.realpath('../lib', __dir__))
13
11
 
14
12
  require 'review/idgxmlmaker'
15
13
 
data/bin/review-index CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
  #
3
- # Copyright (c) 2008-2019 Minero Aoki, Kenshi Muto
3
+ # Copyright (c) 2008-2020 Minero Aoki, Kenshi Muto
4
4
  # 1999-2007 Minero Aoki
5
5
  #
6
6
  # This program is free software.
@@ -9,98 +9,17 @@
9
9
  # For details of the GNU LGPL, see the file "COPYING".
10
10
  #
11
11
 
12
- require 'pathname'
12
+ $LOAD_PATH.unshift(File.realpath('../lib', __dir__))
13
13
 
14
- bindir = Pathname.new(__FILE__).realpath.dirname
15
- $LOAD_PATH.unshift((bindir + '../lib').realpath)
16
-
17
- require 'review/book'
18
- require 'review/tocparser'
19
14
  require 'review/tocprinter'
20
- require 'review/version'
21
- require 'optparse'
22
15
 
23
- def main
24
- @logger = ReVIEW.logger
16
+ begin
25
17
  Signal.trap(:INT) { exit 1 }
26
18
  if RUBY_PLATFORM !~ /mswin(?!ce)|mingw|cygwin|bccwin/
27
19
  Signal.trap(:PIPE, 'IGNORE')
28
20
  end
29
- _main
21
+
22
+ ReVIEW::TOCPrinter.execute(*ARGV)
30
23
  rescue Errno::EPIPE
31
24
  exit 0
32
25
  end
33
-
34
- def _main
35
- yamlfile = 'config.yml'
36
- printer_class = ReVIEW::TextTOCPrinter
37
- source = nil
38
- upper = ReVIEW::TOCPrinter.default_upper_level
39
- param = {}
40
- book = ReVIEW::Book::Base.load
41
-
42
- opts = OptionParser.new
43
- opts.version = ReVIEW::VERSION
44
- opts.on('--yaml=YAML', 'Read configurations from YAML file.') { |yaml| yamlfile = yaml }
45
- opts.on('-a', '--all', 'print all chapters.') { source = book }
46
- opts.on('-p', '--part N', 'list only part N.') do |n|
47
- source = book.part(Integer(n)) or
48
- error_exit("part #{n} does not exist in this book")
49
- end
50
- opts.on('-c', '--chapter C', 'list only chapter C.') do |c|
51
- begin
52
- source = ReVIEW::Book::Part.new(nil, 1, [book.chapter(c)])
53
- rescue
54
- error_exit("chapter #{c} does not exist in this book")
55
- end
56
- end
57
- opts.on('-l', '--level N', 'list upto N level (1..4, default=4)') do |n|
58
- upper = Integer(n)
59
- unless (0..4).cover?(upper) # 0 is hidden option
60
- $stderr.puts '-l/--level option accepts only 1..4'
61
- exit 1
62
- end
63
- end
64
- opts.on('--text', 'output in plain text (default)') { printer_class = ReVIEW::TextTOCPrinter }
65
- opts.on('--html', 'output in HTML (deprecated)') { printer_class = ReVIEW::HTMLTOCPrinter }
66
- opts.on('--help', 'print this message and quit.') do
67
- puts opts.help
68
- exit 0
69
- end
70
- begin
71
- opts.parse!
72
- rescue OptionParser::ParseError => e
73
- @logger.error e.message
74
- $stderr.puts opts.help
75
- exit 1
76
- end
77
-
78
- book.config = ReVIEW::Configure.values
79
- book.load_config(yamlfile) if yamlfile
80
-
81
- if source
82
- error_exit('-a/-s option and file arguments are exclusive') unless ARGV.empty?
83
- else
84
- puts opts.help
85
- exit 0
86
- end
87
-
88
- begin
89
- printer = printer_class.new(upper, param)
90
- if source.is_a?(ReVIEW::Book::Part)
91
- printer.print_part(source)
92
- else
93
- printer.print_book(source)
94
- end
95
- rescue ReVIEW::Error, Errno::ENOENT => e
96
- raise if $DEBUG
97
- error_exit(e.message)
98
- end
99
- end
100
-
101
- def error_exit(msg)
102
- @logger.error msg
103
- exit 1
104
- end
105
-
106
- main