review 3.2.0 → 5.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (282) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby-tex.yml +31 -0
  3. data/.github/workflows/ruby-win.yml +45 -0
  4. data/.github/workflows/ruby.yml +27 -0
  5. data/.rubocop.yml +167 -42
  6. data/.travis.yml +1 -1
  7. data/Dockerfile +21 -5
  8. data/NEWS.ja.md +428 -1
  9. data/NEWS.md +429 -2
  10. data/README.md +11 -7
  11. data/Rakefile +7 -2
  12. data/appveyor.yml +0 -20
  13. data/bin/review +2 -4
  14. data/bin/review-catalog-converter +5 -5
  15. data/bin/review-check +13 -17
  16. data/bin/review-checkdep +3 -6
  17. data/bin/review-compile +13 -22
  18. data/bin/review-epub2html +1 -4
  19. data/bin/review-epubmaker +3 -4
  20. data/bin/review-idgxmlmaker +14 -0
  21. data/bin/review-index +5 -86
  22. data/bin/review-init +1 -4
  23. data/bin/review-pdfmaker +1 -3
  24. data/bin/review-preproc +11 -13
  25. data/bin/review-textmaker +1 -3
  26. data/bin/review-update +1 -4
  27. data/bin/review-validate +7 -7
  28. data/bin/review-vol +5 -82
  29. data/bin/review-webmaker +1 -3
  30. data/doc/config.yml.sample +67 -16
  31. data/doc/config.yml.sample-simple +4 -3
  32. data/doc/format.ja.md +133 -21
  33. data/doc/format.md +135 -34
  34. data/doc/makeindex.ja.md +2 -2
  35. data/doc/pdfmaker.ja.md +43 -1
  36. data/doc/pdfmaker.md +42 -1
  37. data/doc/quickstart.ja.md +55 -25
  38. data/doc/quickstart.md +47 -17
  39. data/lib/review.rb +1 -1
  40. data/lib/review/book.rb +2 -2
  41. data/lib/review/book/base.rb +89 -90
  42. data/lib/review/book/bib.rb +21 -0
  43. data/lib/review/book/book_unit.rb +158 -0
  44. data/lib/review/book/chapter.rb +51 -29
  45. data/lib/review/book/index.rb +42 -248
  46. data/lib/review/book/index/item.rb +46 -0
  47. data/lib/review/book/page_metric.rb +7 -7
  48. data/lib/review/book/part.rb +45 -10
  49. data/lib/review/book/volume.rb +5 -5
  50. data/lib/review/builder.rb +171 -54
  51. data/lib/review/call_hook.rb +20 -0
  52. data/lib/review/catalog.rb +15 -17
  53. data/lib/review/compiler.rb +240 -102
  54. data/lib/review/configure.rb +101 -12
  55. data/lib/review/converter.rb +1 -1
  56. data/lib/review/epub2html.rb +6 -1
  57. data/lib/review/epubmaker.rb +120 -118
  58. data/lib/review/epubmaker/content.rb +113 -0
  59. data/lib/review/epubmaker/epubcommon.rb +372 -0
  60. data/lib/review/epubmaker/epubv2.rb +178 -0
  61. data/lib/review/epubmaker/epubv3.rb +231 -0
  62. data/lib/review/epubmaker/producer.rb +168 -0
  63. data/lib/review/epubmaker/reviewheaderlistener.rb +12 -2
  64. data/lib/review/epubmaker/zip_exporter.rb +84 -0
  65. data/lib/review/exception.rb +6 -0
  66. data/lib/review/extentions/string.rb +0 -4
  67. data/lib/review/htmlbuilder.rb +147 -149
  68. data/lib/review/htmlutils.rb +10 -14
  69. data/lib/review/i18n.rb +4 -3
  70. data/lib/review/idgxmlbuilder.rb +229 -103
  71. data/lib/review/idgxmlmaker.rb +188 -0
  72. data/lib/review/img_math.rb +245 -0
  73. data/lib/review/index_builder.rb +654 -0
  74. data/lib/review/init-web/finish.html +10 -0
  75. data/lib/review/init-web/index.html +190 -0
  76. data/lib/review/init-web/review-layout-design.js +691 -0
  77. data/lib/review/init.rb +124 -41
  78. data/lib/review/latexbox.rb +58 -0
  79. data/lib/review/latexbuilder.rb +249 -97
  80. data/lib/review/latexutils.rb +9 -1
  81. data/lib/review/lineinput.rb +113 -3
  82. data/lib/review/logger.rb +43 -8
  83. data/lib/review/makerhelper.rb +13 -186
  84. data/lib/review/markdownbuilder.rb +75 -39
  85. data/lib/review/md2inaobuilder.rb +3 -5
  86. data/lib/review/pdfmaker.rb +88 -83
  87. data/lib/review/plaintextbuilder.rb +158 -83
  88. data/lib/review/preprocessor.rb +30 -24
  89. data/lib/review/rstbuilder.rb +58 -39
  90. data/lib/review/sec_counter.rb +14 -0
  91. data/lib/review/template.rb +6 -0
  92. data/lib/review/textmaker.rb +29 -17
  93. data/lib/review/textutils.rb +68 -2
  94. data/lib/review/tocprinter.rb +242 -97
  95. data/lib/review/topbuilder.rb +147 -61
  96. data/lib/review/update.rb +27 -28
  97. data/lib/review/version.rb +1 -1
  98. data/lib/review/volumeprinter.rb +97 -0
  99. data/lib/review/webmaker.rb +36 -35
  100. data/lib/review/webtocprinter.rb +39 -35
  101. data/lib/review/yamlloader.rb +4 -0
  102. data/review.gemspec +8 -5
  103. data/samples/sample-book/README.md +7 -2
  104. data/samples/sample-book/src/.gitignore +154 -0
  105. data/samples/sample-book/src/config-ebook.yml +4 -0
  106. data/samples/sample-book/src/config-epub2.yml +1 -1
  107. data/samples/sample-book/src/config-jlreq-ebook.yml +4 -0
  108. data/samples/sample-book/src/config-jlreq.yml +6 -0
  109. data/samples/sample-book/src/config.yml +3 -3
  110. data/samples/sample-book/src/lib/tasks/review.rake +45 -14
  111. data/samples/sample-book/src/lib/tasks/z01_copy_sty.rake +14 -8
  112. data/samples/syntax-book/Gemfile +1 -1
  113. data/samples/syntax-book/ch01.re +3 -1
  114. data/samples/syntax-book/ch02.re +28 -21
  115. data/samples/syntax-book/ch03.re +4 -7
  116. data/samples/syntax-book/config-jlreq-lualatex.yml +4 -0
  117. data/samples/syntax-book/config-jlreq.yml +5 -0
  118. data/samples/syntax-book/config-print.yml +3 -0
  119. data/samples/syntax-book/config.yml +1 -1
  120. data/samples/syntax-book/images/img3-2.png +0 -0
  121. data/samples/syntax-book/lib/tasks/review.rake +30 -15
  122. data/samples/syntax-book/lib/tasks/z01_copy_sty.rake +14 -8
  123. data/templates/html/_colophon.html.erb +23 -0
  124. data/templates/html/_colophon_history.html.erb +9 -0
  125. data/templates/html/_cover.html.erb +10 -0
  126. data/templates/html/_part_body.html.erb +6 -0
  127. data/templates/html/_titlepage.html.erb +20 -0
  128. data/templates/html/layout-html5.html.erb +6 -0
  129. data/templates/html/layout-xhtml1.html.erb +6 -0
  130. data/templates/latex/config.erb +45 -27
  131. data/templates/latex/layout.tex.erb +1 -0
  132. data/templates/latex/review-jlreq/README.md +3 -1
  133. data/templates/latex/review-jlreq/review-base.sty +124 -37
  134. data/templates/latex/review-jlreq/review-jlreq.cls +29 -22
  135. data/templates/latex/review-jlreq/review-style.sty +9 -1
  136. data/templates/latex/review-jlreq/review-tcbox.sty +348 -0
  137. data/templates/latex/review-jlreq/reviewmacro.sty +5 -0
  138. data/templates/latex/review-jsbook/README.md +46 -5
  139. data/templates/latex/review-jsbook/review-base.sty +111 -30
  140. data/templates/latex/review-jsbook/review-jsbook.cls +16 -2
  141. data/templates/latex/review-jsbook/review-style.sty +10 -2
  142. data/templates/latex/review-jsbook/review-tcbox.sty +348 -0
  143. data/templates/latex/review-jsbook/reviewmacro.sty +5 -0
  144. data/templates/opf/epubv2.opf.erb +7 -7
  145. data/templates/opf/epubv3.opf.erb +7 -7
  146. data/templates/opf/opf_manifest_epubv2.opf.erb +10 -0
  147. data/templates/opf/opf_manifest_epubv3.opf.erb +10 -0
  148. data/templates/opf/opf_metainfo_epubv2.opf.erb +17 -0
  149. data/templates/opf/opf_metainfo_epubv3.opf.erb +49 -0
  150. data/templates/opf/opf_tocx_epubv2.opf.erb +9 -0
  151. data/templates/opf/opf_tocx_epubv3.opf.erb +17 -0
  152. data/templates/web/html/layout-html5.html.erb +9 -8
  153. data/templates/web/html/layout-xhtml1.html.erb +6 -0
  154. data/test/assets/header_listener.html +35 -0
  155. data/test/assets/img_math/img1.png +0 -0
  156. data/test/assets/img_math/img2.png +0 -0
  157. data/test/assets/img_math/img3.png +0 -0
  158. data/test/assets/syntax_book_index_detail.txt +58 -0
  159. data/test/assets/test_template.tex +20 -9
  160. data/test/assets/test_template_backmatter.tex +20 -9
  161. data/test/book_test_helper.rb +11 -5
  162. data/test/run_test.rb +1 -1
  163. data/test/test_book.rb +123 -78
  164. data/test/test_book_chapter.rb +99 -56
  165. data/test/test_book_part.rb +3 -3
  166. data/test/test_builder.rb +24 -15
  167. data/test/test_catalog.rb +19 -42
  168. data/test/test_catalog_converter_cmd.rb +1 -1
  169. data/test/test_converter.rb +1 -0
  170. data/test/test_epub3maker.rb +170 -126
  171. data/test/test_epubmaker.rb +249 -129
  172. data/test/test_epubmaker_cmd.rb +16 -9
  173. data/test/test_helper.rb +23 -11
  174. data/test/test_htmlbuilder.rb +1083 -114
  175. data/test/test_htmlutils.rb +0 -12
  176. data/test/test_i18n.rb +37 -37
  177. data/test/test_idgxmlbuilder.rb +627 -27
  178. data/test/test_idgxmlmaker_cmd.rb +50 -0
  179. data/test/test_image_finder.rb +52 -70
  180. data/test/test_img_math.rb +111 -0
  181. data/test/test_index.rb +62 -52
  182. data/test/test_indexbuilder.rb +52 -0
  183. data/test/test_latexbuilder.rb +1189 -59
  184. data/test/test_latexbuilder_v2.rb +74 -34
  185. data/test/test_lineinput.rb +20 -93
  186. data/test/test_logger.rb +17 -4
  187. data/test/test_makerhelper.rb +2 -14
  188. data/test/test_markdownbuilder.rb +77 -4
  189. data/test/test_md2inaobuilder.rb +12 -2
  190. data/test/test_pdfmaker.rb +101 -12
  191. data/test/test_pdfmaker_cmd.rb +102 -8
  192. data/test/test_plaintextbuilder.rb +562 -31
  193. data/test/test_review_ext.rb +2 -1
  194. data/test/test_reviewheaderlistener.rb +49 -0
  195. data/test/test_rstbuilder.rb +58 -5
  196. data/test/test_sec_counter.rb +156 -0
  197. data/test/test_template.rb +12 -2
  198. data/test/test_textmaker_cmd.rb +58 -0
  199. data/test/test_textutils.rb +109 -2
  200. data/test/test_tocprinter.rb +46 -0
  201. data/test/test_topbuilder.rb +400 -17
  202. data/test/test_update.rb +53 -44
  203. data/test/test_webtocprinter.rb +75 -43
  204. data/test/test_yamlloader.rb +13 -0
  205. data/test/test_zip_exporter.rb +5 -6
  206. data/vendor/gentombow/LICENSE +1 -1
  207. data/vendor/gentombow/Makefile +0 -1
  208. data/vendor/gentombow/bounddvi-en.pdf +0 -0
  209. data/vendor/gentombow/bounddvi-en.tex +1 -0
  210. data/vendor/gentombow/bounddvi.pdf +0 -0
  211. data/vendor/gentombow/bounddvi.sty +30 -7
  212. data/vendor/gentombow/bounddvi.tex +1 -0
  213. data/vendor/gentombow/create_archive.sh +1 -0
  214. data/vendor/gentombow/gentombow-ja.pdf +0 -0
  215. data/vendor/gentombow/gentombow-ja.tex +9 -0
  216. data/vendor/gentombow/gentombow.pdf +0 -0
  217. data/vendor/gentombow/gentombow.sty +32 -10
  218. data/vendor/gentombow/gentombow.tex +8 -0
  219. data/vendor/gentombow/tests/gentombow-01-pdfx.tex +8 -0
  220. data/vendor/gentombow/tests/gentombow-02-pdfx.tex +8 -0
  221. data/vendor/jsclasses/LICENSE +1 -1
  222. data/vendor/jsclasses/Makefile +3 -2
  223. data/vendor/jsclasses/create_archive.sh +5 -5
  224. data/vendor/jsclasses/jis/Makefile +3 -2
  225. data/vendor/jsclasses/jis/jsarticle.cls +74 -31
  226. data/vendor/jsclasses/jis/jsbook.cls +74 -31
  227. data/vendor/jsclasses/jis/jsclasses.dtx +176 -36
  228. data/vendor/jsclasses/jis/jsclasses.ins +15 -5
  229. data/vendor/jsclasses/jis/jslogo.dtx +4 -4
  230. data/vendor/jsclasses/jis/jslogo.ins +9 -0
  231. data/vendor/jsclasses/jis/jslogo.sty +4 -16
  232. data/vendor/jsclasses/jis/jspf.cls +73 -30
  233. data/vendor/jsclasses/jis/jsreport.cls +74 -31
  234. data/vendor/jsclasses/jis/jsverb.ins +9 -0
  235. data/vendor/jsclasses/jis/jsverb.sty +1 -13
  236. data/vendor/jsclasses/jis/kiyou.cls +74 -31
  237. data/vendor/jsclasses/jis/minijs.sty +65 -22
  238. data/vendor/jsclasses/jis/okumacro.dtx +4 -5
  239. data/vendor/jsclasses/jis/okumacro.ins +9 -0
  240. data/vendor/jsclasses/jis/okumacro.sty +4 -17
  241. data/vendor/jsclasses/jis/okuverb.ins +9 -0
  242. data/vendor/jsclasses/jis/okuverb.sty +1 -13
  243. data/vendor/jsclasses/jis/winjis.sty +23 -19
  244. data/vendor/jsclasses/jsarticle.cls +74 -31
  245. data/vendor/jsclasses/jsbook.cls +74 -31
  246. data/vendor/jsclasses/jsclasses.dtx +176 -36
  247. data/vendor/jsclasses/jsclasses.ins +15 -5
  248. data/vendor/jsclasses/jsclasses.pdf +0 -0
  249. data/vendor/jsclasses/jslogo.dtx +4 -4
  250. data/vendor/jsclasses/jslogo.ins +9 -0
  251. data/vendor/jsclasses/jslogo.pdf +0 -0
  252. data/vendor/jsclasses/jslogo.sty +4 -16
  253. data/vendor/jsclasses/jspf.cls +73 -30
  254. data/vendor/jsclasses/jsreport.cls +74 -31
  255. data/vendor/jsclasses/jsverb.ins +9 -0
  256. data/vendor/jsclasses/jsverb.pdf +0 -0
  257. data/vendor/jsclasses/jsverb.sty +1 -13
  258. data/vendor/jsclasses/kiyou.cls +74 -31
  259. data/vendor/jsclasses/minijs.sty +68 -22
  260. data/vendor/jsclasses/okumacro.dtx +4 -5
  261. data/vendor/jsclasses/okumacro.ins +9 -0
  262. data/vendor/jsclasses/okumacro.pdf +0 -0
  263. data/vendor/jsclasses/okumacro.sty +4 -17
  264. data/vendor/jsclasses/okuverb.ins +9 -0
  265. data/vendor/jsclasses/okuverb.pdf +0 -0
  266. data/vendor/jsclasses/okuverb.sty +1 -13
  267. data/vendor/jsclasses/tests/relfont.tex +10 -0
  268. data/vendor/jsclasses/winjis.sty +23 -19
  269. metadata +136 -23
  270. data/.rubocop_todo.yml +0 -7
  271. data/lib/epubmaker.rb +0 -23
  272. data/lib/epubmaker/content.rb +0 -110
  273. data/lib/epubmaker/epubcommon.rb +0 -441
  274. data/lib/epubmaker/epubv2.rb +0 -143
  275. data/lib/epubmaker/epubv3.rb +0 -233
  276. data/lib/epubmaker/producer.rb +0 -375
  277. data/lib/epubmaker/zip_exporter.rb +0 -81
  278. data/lib/lineinput.rb +0 -155
  279. data/lib/review/book/compilable.rb +0 -173
  280. data/lib/review/tocparser.rb +0 -271
  281. data/samples/syntax-book/review-ext.rb +0 -14
  282. data/test/test_tocparser.rb +0 -25
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/appveyor.yml CHANGED
@@ -6,21 +6,6 @@ install:
6
6
  build_script:
7
7
  - bundle install
8
8
  - bundle exec rake test --trace --verbose
9
- - bundle exec rubocop
10
-
11
- before_test:
12
- - gem install -N epubcheck-ruby
13
-
14
- test_script:
15
- - ruby bin/review-init hello
16
- - cd hello
17
- - ruby ../bin/review-epubmaker config.yml
18
- - epubcheck book.epub
19
- - cd ..
20
- - ruby bin/review-init hello2 --epub-version 2
21
- - cd hello2
22
- - ruby ../bin/review-epubmaker config.yml
23
- - epubcheck book.epub
24
9
 
25
10
  branches:
26
11
  only:
@@ -28,9 +13,4 @@ branches:
28
13
 
29
14
  environment:
30
15
  matrix:
31
- - ruby_version: "24"
32
- - ruby_version: "24-x64"
33
- - ruby_version: "25"
34
- - ruby_version: "25-x64"
35
16
  - ruby_version: "26"
36
- - ruby_version: "26-x64"
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
 
@@ -140,7 +139,7 @@ end
140
139
  def replace_old_style_part(dir)
141
140
  catalog = ReVIEW::Catalog.new(File.open("#{dir}/catalog.yml"))
142
141
  Array.new(catalog.parts.split("\n")).each_with_index do |part, part_idx|
143
- next if part.end_with? '.re'
142
+ next if part.end_with?('.re')
144
143
 
145
144
  allow_overwrite = true
146
145
  part_name = sprintf('part%d.re', part_idx + 1)
@@ -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
@@ -50,7 +45,7 @@ def main
50
45
  end
51
46
  opts.on('--text', 'Check text.') do
52
47
  modes ||= []
53
- modes.push :text
48
+ modes.push(:text)
54
49
  end
55
50
  opts.on('--help', 'print this message and quit.') do
56
51
  puts opts.help
@@ -72,7 +67,7 @@ def main
72
67
  modes.each do |mode|
73
68
  case mode
74
69
  when :text
75
- check_text files
70
+ check_text(files)
76
71
  else
77
72
  raise 'must not happen'
78
73
  end
@@ -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,11 +117,12 @@ 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
- nega.push n.strip
123
+ nega.push(n.strip)
126
124
  end
127
- words.push line.strip
125
+ words.push(line.strip)
128
126
  end
129
127
  return Regexp.compile(words.join('|')),
130
128
  nega.empty? ? nil : Regexp.compile(nega.join('|'))
@@ -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,7 +152,8 @@ 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
160
- buf.push line.strip
155
+
156
+ buf.push(line.strip)
161
157
  end
162
158
  yield buf, lineno
163
159
  @review_utils_word_ok = nil
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
 
@@ -28,9 +25,9 @@ def main
28
25
  @unprovided[kw] = location
29
26
  end
30
27
  when /\A\#@provide\((.*)\)/
31
- provide $1
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,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 'fileutils'
@@ -35,7 +32,7 @@ def _main
35
32
  @logger = ReVIEW.logger
36
33
  @mode = :files
37
34
  @basedir = nil
38
- if /\Areview2/ =~ File.basename($PROGRAM_NAME)
35
+ if File.basename($PROGRAM_NAME).start_with?('review2')
39
36
  @target = File.basename($PROGRAM_NAME, '.rb').sub('review2', '')
40
37
  else
41
38
  @target = nil
@@ -79,32 +76,30 @@ def _main
79
76
  error('no input') if ARGV.empty?
80
77
 
81
78
  @basedir = File.dirname(ARGV[0])
82
- book = ReVIEW::Book::Base.load(@basedir)
83
- book.config = @config # needs only at the first time
79
+ book = ReVIEW::Book::Base.new(@basedir, config: @config)
84
80
  ARGV.each do |item|
85
81
  error("file not found: #{item}") unless File.exist?(File.join(book.config['contentdir'], item))
86
82
  chap_name = File.basename(item, '.*')
87
83
  chap = book.chapter(chap_name)
88
- compiler = ReVIEW::Compiler.new(load_strategy_class(@target, @check_only))
84
+ compiler = ReVIEW::Compiler.new(load_builder_class(@target, @check_only))
89
85
  result = compiler.compile(chap)
90
86
  if @output_filename
91
- write @output_filename, result
87
+ File.write(@output_filename, result)
92
88
  else
93
89
  puts result unless @check_only
94
90
  end
95
91
  end
96
92
  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))
93
+ book = @basedir ? ReVIEW::Book::Base.new(@basedir, config: @config) : ReVIEW::Book::Base.new(config: @config)
94
+ compiler = ReVIEW::Compiler.new(load_builder_class(@target, @check_only))
100
95
  book.chapters.each do |chap|
101
96
  str = compiler.compile(chap)
102
- write "#{chap.name}#{compiler.strategy.extname}", str unless @check_only
97
+ File.write("#{chap.name}#{compiler.builder.extname}", str) unless @check_only
103
98
  end
104
99
  # PART
105
100
  book.parts_in_file.each do |part|
106
101
  str = compiler.compile(part)
107
- write "#{part.name}#{compiler.strategy.extname}", str unless @check_only
102
+ File.write("#{part.name}#{compiler.builder.extname}", str) unless @check_only
108
103
  end
109
104
  else
110
105
  raise "must not happen: #{@mode}"
@@ -128,7 +123,7 @@ def parse_opts
128
123
  opts.on('--chapref="before,middle,after"', 'Chapref decoration. (idgxml)') { |cdec| @config['chapref'] = cdec }
129
124
  opts.on('--chapterlink', 'make chapref hyperlink') { @config['chapterlink'] = true }
130
125
  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 }
126
+ opts.on('--mathml', 'Use MathML for TeX equation in HTML') { @config['math_format'] = 'mathml' }
132
127
  opts.on('--htmlversion=VERSION', 'HTML version.') do |v|
133
128
  v = v.to_i
134
129
  @config['htmlversion'] = v if [4, 5].include?(v)
@@ -170,21 +165,17 @@ def parse_opts
170
165
  end
171
166
 
172
167
  def error(msg)
173
- @logger.error "#{File.basename($PROGRAM_NAME, '.*')}: #{msg}"
168
+ @logger.error msg
174
169
  exit 1
175
170
  end
176
171
 
177
172
  def warn(msg)
178
- @logger.warn "#{File.basename($PROGRAM_NAME, '.*')}: #{msg}"
173
+ @logger.warn msg
179
174
  end
180
175
 
181
- def load_strategy_class(target, strict)
176
+ def load_builder_class(target, strict)
182
177
  require "review/#{target}builder"
183
178
  ReVIEW.const_get("#{target.upcase}Builder").new(strict)
184
179
  end
185
180
 
186
- def write(path, str)
187
- File.open(path, 'w') { |f| f.puts str }
188
- end
189
-
190
181
  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)
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+ # Copyright (c) 2019 Kenshi Muto
3
+ #
4
+ # This program is free software.
5
+ # You can distribute or modify this program under the terms of
6
+ # the GNU LGPL, Lesser General Public License version 2.1.
7
+ # For details of the GNU LGPL, see the file "COPYING".
8
+ #
9
+
10
+ $LOAD_PATH.unshift(File.realpath('../lib', __dir__))
11
+
12
+ require 'review/idgxmlmaker'
13
+
14
+ ReVIEW::IDGXMLMaker.execute(*ARGV)
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 "#{File.basename($PROGRAM_NAME)}: #{msg}"
103
- exit 1
104
- end
105
-
106
- main