review 3.1.0 → 5.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (225) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby-win.yml +45 -0
  3. data/.github/workflows/ruby.yml +27 -0
  4. data/.rubocop.yml +161 -34
  5. data/.travis.yml +16 -15
  6. data/Dockerfile +21 -5
  7. data/NEWS.ja.md +394 -0
  8. data/NEWS.md +395 -1
  9. data/README.md +10 -7
  10. data/appveyor.yml +1 -3
  11. data/bin/review-catalog-converter +5 -5
  12. data/bin/review-check +10 -12
  13. data/bin/review-checkdep +2 -2
  14. data/bin/review-compile +17 -23
  15. data/bin/review-epubmaker +3 -35
  16. data/bin/review-idgxmlmaker +16 -0
  17. data/bin/review-index +2 -89
  18. data/bin/review-preproc +13 -13
  19. data/bin/review-validate +4 -4
  20. data/bin/review-vol +4 -78
  21. data/doc/config.yml.sample +47 -12
  22. data/doc/config.yml.sample-simple +3 -2
  23. data/doc/format.ja.md +120 -17
  24. data/doc/format.md +119 -27
  25. data/doc/makeindex.ja.md +2 -2
  26. data/doc/pdfmaker.ja.md +43 -1
  27. data/doc/pdfmaker.md +42 -1
  28. data/doc/quickstart.ja.md +45 -25
  29. data/doc/quickstart.md +37 -16
  30. data/lib/epubmaker/content.rb +3 -2
  31. data/lib/epubmaker/epubcommon.rb +34 -27
  32. data/lib/epubmaker/epubv2.rb +5 -6
  33. data/lib/epubmaker/epubv3.rb +21 -18
  34. data/lib/epubmaker/producer.rb +2 -1
  35. data/lib/review/book.rb +2 -2
  36. data/lib/review/book/base.rb +91 -96
  37. data/lib/review/book/bib.rb +21 -0
  38. data/lib/review/book/book_unit.rb +155 -0
  39. data/lib/review/book/chapter.rb +48 -29
  40. data/lib/review/book/index.rb +46 -240
  41. data/lib/review/book/index/item.rb +46 -0
  42. data/lib/review/book/page_metric.rb +7 -7
  43. data/lib/review/book/part.rb +45 -10
  44. data/lib/review/book/volume.rb +4 -5
  45. data/lib/review/builder.rb +172 -56
  46. data/lib/review/catalog.rb +14 -17
  47. data/lib/review/compiler.rb +219 -121
  48. data/lib/review/configure.rb +39 -7
  49. data/lib/review/converter.rb +1 -1
  50. data/lib/review/epub2html.rb +43 -5
  51. data/lib/review/epubmaker.rb +69 -27
  52. data/lib/review/extentions/string.rb +0 -4
  53. data/lib/review/htmlbuilder.rb +112 -101
  54. data/lib/review/htmlutils.rb +9 -13
  55. data/lib/review/i18n.rb +3 -3
  56. data/lib/review/idgxmlbuilder.rb +202 -78
  57. data/lib/review/idgxmlmaker.rb +186 -0
  58. data/lib/review/index_builder.rb +653 -0
  59. data/lib/review/init-web/finish.html +10 -0
  60. data/lib/review/init-web/index.html +190 -0
  61. data/lib/review/init-web/review-layout-design.js +691 -0
  62. data/lib/review/init.rb +129 -46
  63. data/lib/review/latexbuilder.rb +255 -92
  64. data/lib/review/lineinput.rb +1 -1
  65. data/lib/review/location.rb +32 -0
  66. data/lib/review/logger.rb +4 -8
  67. data/lib/review/makerhelper.rb +35 -5
  68. data/lib/review/markdownbuilder.rb +50 -38
  69. data/lib/review/md2inaobuilder.rb +3 -5
  70. data/lib/review/pdfmaker.rb +60 -57
  71. data/lib/review/plaintextbuilder.rb +154 -87
  72. data/lib/review/preprocessor.rb +20 -42
  73. data/lib/review/rstbuilder.rb +57 -38
  74. data/lib/review/sec_counter.rb +13 -0
  75. data/lib/review/textmaker.rb +23 -15
  76. data/lib/review/textutils.rb +76 -2
  77. data/lib/review/tocprinter.rb +230 -102
  78. data/lib/review/topbuilder.rb +139 -60
  79. data/lib/review/update.rb +24 -24
  80. data/lib/review/version.rb +1 -1
  81. data/lib/review/volumeprinter.rb +98 -0
  82. data/lib/review/webmaker.rb +20 -24
  83. data/lib/review/webtocprinter.rb +38 -35
  84. data/lib/review/yamlloader.rb +26 -16
  85. data/review.gemspec +6 -4
  86. data/samples/sample-book/README.md +7 -2
  87. data/samples/sample-book/src/.gitignore +154 -0
  88. data/samples/sample-book/src/config-ebook.yml +4 -0
  89. data/samples/sample-book/src/config-jlreq-ebook.yml +4 -0
  90. data/samples/sample-book/src/config-jlreq.yml +6 -0
  91. data/samples/sample-book/src/config.yml +2 -2
  92. data/samples/sample-book/src/lib/tasks/review.rake +29 -14
  93. data/samples/sample-book/src/lib/tasks/z01_copy_sty.rake +14 -8
  94. data/samples/syntax-book/Gemfile +1 -1
  95. data/samples/syntax-book/ch01.re +4 -2
  96. data/samples/syntax-book/ch02.re +8 -16
  97. data/samples/syntax-book/ch03.re +3 -6
  98. data/samples/syntax-book/config-jlreq-lualatex.yml +4 -0
  99. data/samples/syntax-book/config-jlreq.yml +5 -0
  100. data/samples/syntax-book/config-print.yml +3 -0
  101. data/samples/syntax-book/config.yml +1 -1
  102. data/samples/syntax-book/lib/tasks/review.rake +30 -15
  103. data/samples/syntax-book/lib/tasks/z01_copy_sty.rake +14 -8
  104. data/templates/latex/config.erb +39 -25
  105. data/templates/latex/layout.tex.erb +1 -0
  106. data/templates/latex/review-jlreq/README.md +3 -1
  107. data/templates/latex/review-jlreq/review-base.sty +161 -50
  108. data/templates/latex/review-jlreq/review-jlreq.cls +21 -22
  109. data/templates/latex/review-jlreq/review-style.sty +4 -1
  110. data/templates/latex/review-jsbook/README.md +46 -5
  111. data/templates/latex/review-jsbook/review-base.sty +123 -35
  112. data/templates/latex/review-jsbook/review-jsbook.cls +10 -4
  113. data/templates/latex/review-jsbook/review-style.sty +5 -2
  114. data/templates/opf/epubv3.opf.erb +1 -0
  115. data/templates/web/html/layout-html5.html.erb +3 -3
  116. data/test/assets/test_template.tex +19 -7
  117. data/test/assets/test_template_backmatter.tex +19 -7
  118. data/test/book_test_helper.rb +11 -5
  119. data/test/test_book.rb +124 -79
  120. data/test/test_book_chapter.rb +97 -54
  121. data/test/test_book_part.rb +3 -3
  122. data/test/test_builder.rb +38 -13
  123. data/test/test_catalog.rb +24 -42
  124. data/test/test_catalog_converter_cmd.rb +1 -1
  125. data/test/test_converter.rb +1 -0
  126. data/test/test_epub3maker.rb +2 -2
  127. data/test/test_epubmaker.rb +8 -0
  128. data/test/test_epubmaker_cmd.rb +14 -7
  129. data/test/test_helper.rb +18 -7
  130. data/test/test_htmlbuilder.rb +1491 -205
  131. data/test/test_htmlutils.rb +0 -12
  132. data/test/test_i18n.rb +37 -37
  133. data/test/test_idgxmlbuilder.rb +744 -42
  134. data/test/test_idgxmlmaker_cmd.rb +46 -0
  135. data/test/test_image_finder.rb +52 -70
  136. data/test/test_index.rb +94 -44
  137. data/test/test_indexbuilder.rb +52 -0
  138. data/test/test_latexbuilder.rb +1784 -161
  139. data/test/test_latexbuilder_v2.rb +671 -102
  140. data/test/test_logger.rb +17 -4
  141. data/test/test_makerhelper.rb +2 -14
  142. data/test/test_markdownbuilder.rb +137 -16
  143. data/test/test_md2inaobuilder.rb +32 -9
  144. data/test/test_pdfmaker.rb +30 -12
  145. data/test/test_pdfmaker_cmd.rb +100 -6
  146. data/test/test_plaintextbuilder.rb +791 -30
  147. data/test/test_preprocessor.rb +2 -16
  148. data/test/test_review_ext.rb +2 -1
  149. data/test/test_rstbuilder.rb +274 -27
  150. data/test/test_sec_counter.rb +156 -0
  151. data/test/test_textmaker_cmd.rb +54 -0
  152. data/test/test_textutils.rb +109 -2
  153. data/test/test_topbuilder.rb +724 -34
  154. data/test/test_update.rb +20 -11
  155. data/test/test_webtocprinter.rb +75 -43
  156. data/test/test_yamlloader.rb +13 -0
  157. data/vendor/gentombow/LICENSE +1 -1
  158. data/vendor/gentombow/Makefile +0 -1
  159. data/vendor/gentombow/bounddvi-en.pdf +0 -0
  160. data/vendor/gentombow/bounddvi-en.tex +1 -0
  161. data/vendor/gentombow/bounddvi.pdf +0 -0
  162. data/vendor/gentombow/bounddvi.sty +30 -7
  163. data/vendor/gentombow/bounddvi.tex +1 -0
  164. data/vendor/gentombow/create_archive.sh +1 -0
  165. data/vendor/gentombow/gentombow-ja.pdf +0 -0
  166. data/vendor/gentombow/gentombow-ja.tex +9 -0
  167. data/vendor/gentombow/gentombow.pdf +0 -0
  168. data/vendor/gentombow/gentombow.sty +32 -10
  169. data/vendor/gentombow/gentombow.tex +8 -0
  170. data/vendor/gentombow/tests/gentombow-01-pdfx.tex +8 -0
  171. data/vendor/gentombow/tests/gentombow-02-pdfx.tex +8 -0
  172. data/vendor/jsclasses/LICENSE +1 -1
  173. data/vendor/jsclasses/Makefile +3 -2
  174. data/vendor/jsclasses/create_archive.sh +5 -5
  175. data/vendor/jsclasses/jis/Makefile +3 -2
  176. data/vendor/jsclasses/jis/jsarticle.cls +74 -31
  177. data/vendor/jsclasses/jis/jsbook.cls +74 -31
  178. data/vendor/jsclasses/jis/jsclasses.dtx +176 -36
  179. data/vendor/jsclasses/jis/jsclasses.ins +15 -5
  180. data/vendor/jsclasses/jis/jslogo.dtx +4 -4
  181. data/vendor/jsclasses/jis/jslogo.ins +9 -0
  182. data/vendor/jsclasses/jis/jslogo.sty +4 -16
  183. data/vendor/jsclasses/jis/jspf.cls +73 -30
  184. data/vendor/jsclasses/jis/jsreport.cls +74 -31
  185. data/vendor/jsclasses/jis/jsverb.ins +9 -0
  186. data/vendor/jsclasses/jis/jsverb.sty +1 -13
  187. data/vendor/jsclasses/jis/kiyou.cls +74 -31
  188. data/vendor/jsclasses/jis/minijs.sty +65 -22
  189. data/vendor/jsclasses/jis/okumacro.dtx +4 -5
  190. data/vendor/jsclasses/jis/okumacro.ins +9 -0
  191. data/vendor/jsclasses/jis/okumacro.sty +4 -17
  192. data/vendor/jsclasses/jis/okuverb.ins +9 -0
  193. data/vendor/jsclasses/jis/okuverb.sty +1 -13
  194. data/vendor/jsclasses/jis/winjis.sty +23 -19
  195. data/vendor/jsclasses/jsarticle.cls +74 -31
  196. data/vendor/jsclasses/jsbook.cls +74 -31
  197. data/vendor/jsclasses/jsclasses.dtx +176 -36
  198. data/vendor/jsclasses/jsclasses.ins +15 -5
  199. data/vendor/jsclasses/jsclasses.pdf +0 -0
  200. data/vendor/jsclasses/jslogo.dtx +4 -4
  201. data/vendor/jsclasses/jslogo.ins +9 -0
  202. data/vendor/jsclasses/jslogo.pdf +0 -0
  203. data/vendor/jsclasses/jslogo.sty +4 -16
  204. data/vendor/jsclasses/jspf.cls +73 -30
  205. data/vendor/jsclasses/jsreport.cls +74 -31
  206. data/vendor/jsclasses/jsverb.ins +9 -0
  207. data/vendor/jsclasses/jsverb.pdf +0 -0
  208. data/vendor/jsclasses/jsverb.sty +1 -13
  209. data/vendor/jsclasses/kiyou.cls +74 -31
  210. data/vendor/jsclasses/minijs.sty +68 -22
  211. data/vendor/jsclasses/okumacro.dtx +4 -5
  212. data/vendor/jsclasses/okumacro.ins +9 -0
  213. data/vendor/jsclasses/okumacro.pdf +0 -0
  214. data/vendor/jsclasses/okumacro.sty +4 -17
  215. data/vendor/jsclasses/okuverb.ins +9 -0
  216. data/vendor/jsclasses/okuverb.pdf +0 -0
  217. data/vendor/jsclasses/okuverb.sty +1 -13
  218. data/vendor/jsclasses/tests/relfont.tex +10 -0
  219. data/vendor/jsclasses/winjis.sty +23 -19
  220. metadata +65 -12
  221. data/.rubocop_todo.yml +0 -7
  222. data/lib/review/book/compilable.rb +0 -173
  223. data/lib/review/tocparser.rb +0 -271
  224. data/samples/syntax-book/review-ext.rb +0 -14
  225. data/test/test_tocparser.rb +0 -25
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # Re:VIEW
2
2
 
3
3
  [![Gem Version](https://badge.fury.io/rb/review.svg)](http://badge.fury.io/rb/review)
4
- [![Build Status](https://secure.travis-ci.org/kmuto/review.svg)](http://travis-ci.org/kmuto/review)
4
+ [![Build Status](https://github.com/kmuto/review/workflows/Test/badge.svg)](https://github.com/kmuto/review/actions)
5
5
  [![Build status](https://ci.appveyor.com/api/projects/status/github/kmuto/review?svg=true)](https://ci.appveyor.com/project/kmuto/review)
6
6
 
7
7
  Re:VIEW is an easy-to-use digital publishing system for paper books and ebooks.
@@ -22,15 +22,17 @@ Re:VIEW uses its original format('Re:VIEW format') as source files. See doc/for
22
22
 
23
23
  ## Commands
24
24
 
25
- There are two commands generate files directly.
25
+ There are commands generate files directly.
26
26
 
27
27
  * review-epubmaker: generate EPUB file.
28
28
  * review-pdfmaker: generate PDF file using LaTeX (TeXLive).
29
29
  * review-textmaker: generate text files.
30
30
  * review-webmaker: generate Web pages.
31
+ * review-idgxmlmaker: generate InDesign XML files.
31
32
 
32
33
  And some useful commands.
33
34
 
35
+ * review-init: create a project.
34
36
  * review-compile: compile Re:VIEW format files.
35
37
  * review-vol: figure out size of Re:VIEW files.
36
38
  * review-index: generate index with various format.
@@ -60,10 +62,11 @@ $ echo "export PATH=PATH_OF_REVIEW/bin:$PATH" >> ~/.profile
60
62
  $ review-init hello
61
63
  $ cd hello
62
64
  $ (... add and edit *.re file, config.yml and catalog.yml ...)
63
- $ rake epub ## generating EPUB
64
- $ rake pdf ## generating PDF (Requirement TeXLive)
65
- $ rake text ## generating texts
66
- $ rake web ## generating Web pages
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
67
70
  ```
68
71
 
69
72
  For further information, see [doc/quickstart.md](https://github.com/kmuto/review/blob/master/doc/quickstart.md)
@@ -112,4 +115,4 @@ Exception:
112
115
 
113
116
  ## Copyright
114
117
 
115
- Copyright (c) 2006-2019 Minero Aoki, Kenshi Muto, Masayoshi Takahashi, Masanori Kado.
118
+ Copyright (c) 2006-2020 Minero Aoki, Kenshi Muto, Masayoshi Takahashi, Masanori Kado.
@@ -6,7 +6,6 @@ install:
6
6
  build_script:
7
7
  - bundle install
8
8
  - bundle exec rake test --trace --verbose
9
- - bundle exec rubocop
10
9
 
11
10
  branches:
12
11
  only:
@@ -14,5 +13,4 @@ branches:
14
13
 
15
14
  environment:
16
15
  matrix:
17
- - ruby_version: "23"
18
- - ruby_version: "23-x64"
16
+ - ruby_version: "26"
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
  #
3
- # Copyright (c) 2014-2017 Masanori Kado, Kenshi Muto
3
+ # Copyright (c) 2014-2019 Masanori Kado, Kenshi Muto
4
4
  #
5
5
  # This program is free software.
6
6
  # You can distribute or modify this program under the terms of
@@ -30,8 +30,8 @@ def main
30
30
 
31
31
  begin
32
32
  opts.parse!
33
- rescue OptionParser::ParseError => err
34
- @logger.error err.message
33
+ rescue OptionParser::ParseError => e
34
+ @logger.error e.message
35
35
  $stderr.puts opts.help
36
36
  exit 1
37
37
  end
@@ -109,7 +109,7 @@ def parse_postdef(str, to_appendix = false)
109
109
  end
110
110
 
111
111
  def parse_parts(parts_str, chaps_str)
112
- if parts_str.blank? or chaps_str.blank?
112
+ if parts_str.blank? || chaps_str.blank?
113
113
  return "CHAPS:\n\n"
114
114
  end
115
115
 
@@ -140,7 +140,7 @@ end
140
140
  def replace_old_style_part(dir)
141
141
  catalog = ReVIEW::Catalog.new(File.open("#{dir}/catalog.yml"))
142
142
  Array.new(catalog.parts.split("\n")).each_with_index do |part, part_idx|
143
- next if part.end_with? '.re'
143
+ next if part.end_with?('.re')
144
144
 
145
145
  allow_overwrite = true
146
146
  part_name = sprintf('part%d.re', part_idx + 1)
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
  #
3
- # Copyright (c) 2010-2017 Kenshi Muto, Minero Aoki
3
+ # Copyright (c) 2010-2019 Kenshi Muto, Minero Aoki
4
4
  # 1999-2007 Minero Aoki
5
5
  #
6
6
  # This program is free software.
@@ -31,9 +31,7 @@ end
31
31
 
32
32
  def main
33
33
  @config = ReVIEW::Configure.values
34
- @book = ReVIEW::Book::Base.load
35
- @book.config = @config
36
-
34
+ @book = ReVIEW::Book::Base.new(config: @config)
37
35
  @logger = ReVIEW.logger
38
36
 
39
37
  modes = nil
@@ -50,7 +48,7 @@ def main
50
48
  end
51
49
  opts.on('--text', 'Check text.') do
52
50
  modes ||= []
53
- modes.push :text
51
+ modes.push(:text)
54
52
  end
55
53
  opts.on('--help', 'print this message and quit.') do
56
54
  puts opts.help
@@ -58,8 +56,8 @@ def main
58
56
  end
59
57
  begin
60
58
  opts.parse!
61
- rescue OptionParser::ParseError => err
62
- @logger.error(err.message)
59
+ rescue OptionParser::ParseError => e
60
+ @logger.error(e.message)
63
61
  puts opts.help
64
62
  exit 1
65
63
  end
@@ -72,7 +70,7 @@ def main
72
70
  modes.each do |mode|
73
71
  case mode
74
72
  when :text
75
- check_text files
73
+ check_text(files)
76
74
  else
77
75
  raise 'must not happen'
78
76
  end
@@ -87,7 +85,7 @@ def check_text(files)
87
85
  s = para.join
88
86
  m = re.match(s)
89
87
  next if m.nil? || m[0] == @review_utils_word_ok
90
- next if neg and neg =~ s
88
+ next if neg && neg =~ s
91
89
  str, offset = find_line(para, re)
92
90
  out = sprintf("%s:%d: %s\n", path, lineno + offset, str)
93
91
  print out
@@ -122,9 +120,9 @@ def words_re(rc)
122
120
  next if line[0, 1] == '#'
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('|'))
@@ -157,7 +155,7 @@ def each_paragraph(f)
157
155
  break if line.strip.empty?
158
156
  break if %r{\A(?:=|//[\w\}])} =~ line
159
157
  next if /\A\#@/ =~ line
160
- buf.push line.strip
158
+ buf.push(line.strip)
161
159
  end
162
160
  yield buf, lineno
163
161
  @review_utils_word_ok = nil
@@ -28,9 +28,9 @@ def main
28
28
  @unprovided[kw] = location
29
29
  end
30
30
  when /\A\#@provide\((.*)\)/
31
- provide $1
31
+ provide($1)
32
32
  else
33
- line.scan(/@<kw>\{(.*?)[,\}]/) { provide $1 }
33
+ line.scan(/@<kw>\{(.*?)[,}]/) { provide($1) }
34
34
  end
35
35
  end
36
36
  end
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
  #
3
- # Copyright (c) 2008-2018 Kenshi Muto, Masayoshi Takahashi, KADO Masanori, Minero Aoki
3
+ # Copyright (c) 2008-2019 Kenshi Muto, Masayoshi Takahashi, KADO Masanori, Minero Aoki
4
4
  # Copyright (c) 1999-2007 Minero Aoki
5
5
  #
6
6
  # This program is free software.
@@ -35,7 +35,7 @@ def _main
35
35
  @logger = ReVIEW.logger
36
36
  @mode = :files
37
37
  @basedir = nil
38
- if /\Areview2/ =~ File.basename($PROGRAM_NAME)
38
+ if File.basename($PROGRAM_NAME).start_with?('review2')
39
39
  @target = File.basename($PROGRAM_NAME, '.rb').sub('review2', '')
40
40
  else
41
41
  @target = nil
@@ -50,7 +50,7 @@ def _main
50
50
  begin
51
51
  loader = ReVIEW::YAMLLoader.new
52
52
  if @config['yaml']
53
- error "#{config['yaml']} not found." unless File.exist?(@config['yaml'])
53
+ error "#{@config['yaml']} not found." unless File.exist?(@config['yaml'])
54
54
  begin
55
55
  @config.deep_merge!(loader.load_file(@config['yaml']))
56
56
  rescue => e
@@ -79,38 +79,36 @@ def _main
79
79
  error('no input') if ARGV.empty?
80
80
 
81
81
  @basedir = File.dirname(ARGV[0])
82
- book = ReVIEW::Book::Base.load(@basedir)
83
- book.config = @config # needs only at the first time
82
+ book = ReVIEW::Book::Base.new(@basedir, config: @config)
84
83
  ARGV.each do |item|
85
84
  error("file not found: #{item}") unless File.exist?(File.join(book.config['contentdir'], item))
86
85
  chap_name = File.basename(item, '.*')
87
86
  chap = book.chapter(chap_name)
88
- compiler = ReVIEW::Compiler.new(load_strategy_class(@target, @check_only))
87
+ compiler = ReVIEW::Compiler.new(load_builder_class(@target, @check_only))
89
88
  result = compiler.compile(chap)
90
89
  if @output_filename
91
- write @output_filename, result
90
+ File.write(@output_filename, result)
92
91
  else
93
92
  puts result unless @check_only
94
93
  end
95
94
  end
96
95
  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))
96
+ book = @basedir ? ReVIEW::Book::Base.new(@basedir, config: @config) : ReVIEW::Book::Base.new(config: @config)
97
+ compiler = ReVIEW::Compiler.new(load_builder_class(@target, @check_only))
100
98
  book.chapters.each do |chap|
101
99
  str = compiler.compile(chap)
102
- write "#{chap.name}#{compiler.strategy.extname}", str unless @check_only
100
+ File.write("#{chap.name}#{compiler.builder.extname}", str) unless @check_only
103
101
  end
104
102
  # PART
105
103
  book.parts_in_file.each do |part|
106
104
  str = compiler.compile(part)
107
- write "#{part.name}#{compiler.strategy.extname}", str unless @check_only
105
+ File.write("#{part.name}#{compiler.builder.extname}", str) unless @check_only
108
106
  end
109
107
  else
110
108
  raise "must not happen: #{@mode}"
111
109
  end
112
- rescue ReVIEW::ApplicationError => err
113
- error(err.message)
110
+ rescue ReVIEW::ApplicationError => e
111
+ error(e.message)
114
112
  end
115
113
  end
116
114
 
@@ -162,29 +160,25 @@ def parse_opts
162
160
  raise OptionParser::ParseError, 'no target given'
163
161
  end
164
162
  end
165
- rescue OptionParser::ParseError => err
166
- warn(err.message)
163
+ rescue OptionParser::ParseError => e
164
+ warn(e.message)
167
165
  $stderr.puts opts.help
168
166
  exit 1
169
167
  end
170
168
  end
171
169
 
172
170
  def error(msg)
173
- @logger.error "#{File.basename($PROGRAM_NAME, '.*')}: #{msg}"
171
+ @logger.error msg
174
172
  exit 1
175
173
  end
176
174
 
177
175
  def warn(msg)
178
- @logger.warn "#{File.basename($PROGRAM_NAME, '.*')}: #{msg}"
176
+ @logger.warn msg
179
177
  end
180
178
 
181
- def load_strategy_class(target, strict)
179
+ def load_builder_class(target, strict)
182
180
  require "review/#{target}builder"
183
181
  ReVIEW.const_get("#{target.upcase}Builder").new(strict)
184
182
  end
185
183
 
186
- def write(path, str)
187
- File.open(path, 'w') { |f| f.puts str }
188
- end
189
-
190
184
  main
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
- # Copyright (c) 2010-2017 Kenshi Muto and Masayoshi Takahashi
2
+ # Copyright (c) 2010-2019 Kenshi Muto and Masayoshi Takahashi
3
3
  #
4
4
  # This program is free software.
5
5
  # You can distribute or modify this program under the terms of
@@ -10,39 +10,7 @@ require 'pathname'
10
10
  require 'optparse'
11
11
  bindir = Pathname.new(__FILE__).realpath.dirname
12
12
  $LOAD_PATH.unshift((bindir + '../lib').realpath)
13
- require 'review/epubmaker'
14
- require 'review/version'
15
-
16
- @logger = ReVIEW.logger
17
-
18
- rv = ReVIEW::EPUBMaker.new
19
-
20
- opts = OptionParser.new
21
- opts.version = ReVIEW::VERSION
22
- opts.banner = "Usage: #{File.basename($PROGRAM_NAME)} [options] YAML_filename [export_filename]"
23
- opts.on('--help', 'Prints this message and quit.') do
24
- puts opts.help
25
- exit 0
26
- end
27
13
 
28
- begin
29
- opts.parse!
30
- rescue OptionParser::ParseError => err
31
- @logger.error err.message
32
- $stderr.puts opts.help
33
- exit 1
34
- end
35
-
36
- if ARGV.size < 1
37
- puts opts.help
38
- exit 1
39
- end
40
-
41
- unless File.exist?(ARGV[0])
42
- @logger.error "#{File.basename($PROGRAM_NAME, '.*')}: #{ARGV[0]} not found."
43
- exit 1
44
- end
14
+ require 'review/epubmaker'
45
15
 
46
- yaml_file = ARGV[0]
47
- bookname = ARGV[1]
48
- rv.produce(yaml_file, bookname)
16
+ ReVIEW::EPUBMaker.execute(*ARGV)
@@ -0,0 +1,16 @@
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
+ require 'pathname'
11
+ bindir = Pathname.new(__FILE__).realpath.dirname
12
+ $LOAD_PATH.unshift((bindir + '../lib').realpath)
13
+
14
+ require 'review/idgxmlmaker'
15
+
16
+ ReVIEW::IDGXMLMaker.execute(*ARGV)
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
  #
3
- # Copyright (c) 2008-2017 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.
@@ -14,93 +14,6 @@ require 'pathname'
14
14
  bindir = Pathname.new(__FILE__).realpath.dirname
15
15
  $LOAD_PATH.unshift((bindir + '../lib').realpath)
16
16
 
17
- require 'review/book'
18
- require 'review/tocparser'
19
17
  require 'review/tocprinter'
20
- require 'review/version'
21
- require 'optparse'
22
18
 
23
- def main
24
- @logger = ReVIEW.logger
25
- Signal.trap(:INT) { exit 1 }
26
- if RUBY_PLATFORM !~ /mswin(?!ce)|mingw|cygwin|bccwin/
27
- Signal.trap(:PIPE, 'IGNORE')
28
- end
29
- _main
30
- rescue Errno::EPIPE
31
- exit 0
32
- 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 => err
73
- @logger.error err.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 => err
96
- raise if $DEBUG
97
- error_exit err.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
19
+ ReVIEW::TOCPrinter.execute(*ARGV)