review 3.0.0 → 4.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (170) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby-win.yml +39 -0
  3. data/.github/workflows/ruby.yml +27 -0
  4. data/.rubocop.yml +50 -12
  5. data/.travis.yml +17 -8
  6. data/Dockerfile +21 -5
  7. data/NEWS.ja.md +358 -0
  8. data/NEWS.md +358 -1
  9. data/README.md +11 -8
  10. data/appveyor.yml +1 -3
  11. data/bin/review-catalog-converter +4 -4
  12. data/bin/review-check +8 -8
  13. data/bin/review-checkdep +1 -1
  14. data/bin/review-compile +12 -12
  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 +14 -19
  19. data/bin/review-validate +3 -3
  20. data/bin/review-vol +4 -78
  21. data/doc/LICENSE +1 -1
  22. data/doc/config.yml.sample +46 -12
  23. data/doc/config.yml.sample-simple +4 -2
  24. data/doc/format.ja.md +37 -13
  25. data/doc/format.md +35 -20
  26. data/doc/pdfmaker.ja.md +43 -1
  27. data/doc/pdfmaker.md +42 -1
  28. data/doc/quickstart.ja.md +46 -26
  29. data/doc/quickstart.md +38 -17
  30. data/lib/epubmaker/epubcommon.rb +10 -5
  31. data/lib/epubmaker/epubv2.rb +1 -1
  32. data/lib/epubmaker/epubv3.rb +1 -0
  33. data/lib/epubmaker/producer.rb +4 -2
  34. data/lib/review/book.rb +1 -1
  35. data/lib/review/book/base.rb +38 -79
  36. data/lib/review/book/chapter.rb +18 -3
  37. data/lib/review/book/compilable.rb +6 -5
  38. data/lib/review/book/index.rb +69 -101
  39. data/lib/review/book/index/item.rb +40 -0
  40. data/lib/review/book/page_metric.rb +7 -7
  41. data/lib/review/book/part.rb +28 -5
  42. data/lib/review/book/volume.rb +3 -4
  43. data/lib/review/builder.rb +105 -44
  44. data/lib/review/catalog.rb +13 -16
  45. data/lib/review/compiler.rb +84 -72
  46. data/lib/review/configure.rb +19 -8
  47. data/lib/review/epub2html.rb +37 -4
  48. data/lib/review/epubmaker.rb +62 -7
  49. data/lib/review/extentions/string.rb +0 -4
  50. data/lib/review/htmlbuilder.rb +102 -115
  51. data/lib/review/htmlutils.rb +2 -3
  52. data/lib/review/i18n.rb +2 -2
  53. data/lib/review/i18n.yml +9 -0
  54. data/lib/review/idgxmlbuilder.rb +153 -74
  55. data/lib/review/idgxmlmaker.rb +191 -0
  56. data/lib/review/init-web/finish.html +10 -0
  57. data/lib/review/init-web/index.html +190 -0
  58. data/lib/review/init-web/review-layout-design.js +691 -0
  59. data/lib/review/init.rb +125 -34
  60. data/lib/review/latexbuilder.rb +199 -88
  61. data/lib/review/lineinput.rb +1 -1
  62. data/lib/review/location.rb +32 -0
  63. data/lib/review/logger.rb +4 -8
  64. data/lib/review/makerhelper.rb +24 -5
  65. data/lib/review/markdownbuilder.rb +31 -37
  66. data/lib/review/md2inaobuilder.rb +3 -5
  67. data/lib/review/pdfmaker.rb +44 -22
  68. data/lib/review/plaintextbuilder.rb +106 -85
  69. data/lib/review/preprocessor.rb +32 -41
  70. data/lib/review/rstbuilder.rb +33 -33
  71. data/lib/review/textmaker.rb +19 -3
  72. data/lib/review/textutils.rb +76 -2
  73. data/lib/review/tocprinter.rb +231 -102
  74. data/lib/review/topbuilder.rb +114 -61
  75. data/lib/review/update.rb +19 -19
  76. data/lib/review/version.rb +1 -1
  77. data/lib/review/volumeprinter.rb +99 -0
  78. data/lib/review/webmaker.rb +11 -4
  79. data/lib/review/webtocprinter.rb +38 -35
  80. data/lib/review/yamlloader.rb +26 -16
  81. data/review.gemspec +6 -4
  82. data/samples/sample-book/README.md +7 -2
  83. data/samples/sample-book/src/.gitignore +154 -0
  84. data/samples/sample-book/src/config-ebook.yml +4 -0
  85. data/samples/sample-book/src/config-jlreq-ebook.yml +4 -0
  86. data/samples/sample-book/src/config-jlreq.yml +6 -0
  87. data/samples/sample-book/src/config.yml +2 -2
  88. data/samples/sample-book/src/lib/tasks/review.rake +29 -14
  89. data/samples/sample-book/src/lib/tasks/z01_copy_sty.rake +14 -8
  90. data/samples/syntax-book/ch01.re +4 -2
  91. data/samples/syntax-book/ch02.re +8 -16
  92. data/samples/syntax-book/ch03.re +3 -6
  93. data/samples/syntax-book/config-jlreq-lualatex.yml +4 -0
  94. data/samples/syntax-book/config-jlreq.yml +5 -0
  95. data/samples/syntax-book/config-print.yml +3 -0
  96. data/samples/syntax-book/config.yml +1 -1
  97. data/samples/syntax-book/lib/tasks/review.rake +30 -15
  98. data/samples/syntax-book/lib/tasks/z01_copy_sty.rake +14 -8
  99. data/templates/latex/config.erb +16 -0
  100. data/templates/latex/layout.tex.erb +4 -0
  101. data/templates/latex/review-jlreq/review-base.sty +150 -61
  102. data/templates/latex/review-jlreq/review-jlreq.cls +74 -8
  103. data/templates/latex/review-jlreq/review-style.sty +4 -1
  104. data/templates/latex/review-jsbook/README.md +39 -0
  105. data/templates/latex/review-jsbook/review-base.sty +101 -23
  106. data/templates/latex/review-jsbook/review-jsbook.cls +28 -5
  107. data/templates/latex/review-jsbook/review-style.sty +5 -2
  108. data/templates/opf/epubv3.opf.erb +1 -0
  109. data/templates/web/html/layout-html5.html.erb +2 -2
  110. data/test/assets/test_template.tex +24 -3
  111. data/test/assets/test_template_backmatter.tex +24 -3
  112. data/test/test_book.rb +75 -21
  113. data/test/test_book_chapter.rb +4 -2
  114. data/test/test_book_part.rb +3 -3
  115. data/test/test_builder.rb +16 -0
  116. data/test/test_catalog.rb +24 -42
  117. data/test/test_catalog_converter_cmd.rb +1 -1
  118. data/test/test_epubmaker_cmd.rb +14 -7
  119. data/test/test_helper.rb +15 -7
  120. data/test/test_htmlbuilder.rb +909 -159
  121. data/test/test_i18n.rb +25 -25
  122. data/test/test_idgxmlbuilder.rb +395 -38
  123. data/test/test_idgxmlmaker_cmd.rb +46 -0
  124. data/test/test_image_finder.rb +52 -70
  125. data/test/test_index.rb +50 -10
  126. data/test/test_latexbuilder.rb +1194 -106
  127. data/test/test_latexbuilder_v2.rb +628 -97
  128. data/test/test_logger.rb +14 -1
  129. data/test/test_makerhelper.rb +3 -3
  130. data/test/test_markdownbuilder.rb +134 -16
  131. data/test/test_md2inaobuilder.rb +32 -9
  132. data/test/test_pdfmaker.rb +18 -1
  133. data/test/test_pdfmaker_cmd.rb +100 -6
  134. data/test/test_plaintextbuilder.rb +371 -25
  135. data/test/test_preprocessor.rb +2 -16
  136. data/test/test_rstbuilder.rb +249 -26
  137. data/test/test_textmaker_cmd.rb +54 -0
  138. data/test/test_textutils.rb +109 -2
  139. data/test/test_topbuilder.rb +546 -31
  140. data/test/test_update.rb +17 -8
  141. data/test/test_webtocprinter.rb +66 -34
  142. data/test/test_yamlloader.rb +13 -0
  143. data/vendor/jsclasses/LICENSE +1 -1
  144. data/vendor/jsclasses/jis/jsarticle.cls +53 -14
  145. data/vendor/jsclasses/jis/jsbook.cls +53 -14
  146. data/vendor/jsclasses/jis/jsclasses.dtx +84 -25
  147. data/vendor/jsclasses/jis/jslogo.dtx +4 -4
  148. data/vendor/jsclasses/jis/jslogo.sty +3 -3
  149. data/vendor/jsclasses/jis/jspf.cls +52 -13
  150. data/vendor/jsclasses/jis/jsreport.cls +53 -14
  151. data/vendor/jsclasses/jis/kiyou.cls +53 -14
  152. data/vendor/jsclasses/jis/okumacro.dtx +4 -5
  153. data/vendor/jsclasses/jis/okumacro.sty +3 -4
  154. data/vendor/jsclasses/jsarticle.cls +53 -14
  155. data/vendor/jsclasses/jsbook.cls +53 -14
  156. data/vendor/jsclasses/jsclasses.dtx +84 -25
  157. data/vendor/jsclasses/jsclasses.pdf +0 -0
  158. data/vendor/jsclasses/jslogo.dtx +4 -4
  159. data/vendor/jsclasses/jslogo.pdf +0 -0
  160. data/vendor/jsclasses/jslogo.sty +3 -3
  161. data/vendor/jsclasses/jspf.cls +52 -13
  162. data/vendor/jsclasses/jsreport.cls +53 -14
  163. data/vendor/jsclasses/kiyou.cls +53 -14
  164. data/vendor/jsclasses/okumacro.dtx +4 -5
  165. data/vendor/jsclasses/okumacro.pdf +0 -0
  166. data/vendor/jsclasses/okumacro.sty +3 -4
  167. metadata +55 -10
  168. data/lib/review/tocparser.rb +0 -271
  169. data/samples/syntax-book/review-ext.rb +0 -14
  170. data/test/test_tocparser.rb +0 -25
@@ -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.
@@ -50,7 +50,7 @@ def main
50
50
  end
51
51
  opts.on('--text', 'Check text.') do
52
52
  modes ||= []
53
- modes.push :text
53
+ modes.push(:text)
54
54
  end
55
55
  opts.on('--help', 'print this message and quit.') do
56
56
  puts opts.help
@@ -58,8 +58,8 @@ def main
58
58
  end
59
59
  begin
60
60
  opts.parse!
61
- rescue OptionParser::ParseError => err
62
- @logger.error(err.message)
61
+ rescue OptionParser::ParseError => e
62
+ @logger.error(e.message)
63
63
  puts opts.help
64
64
  exit 1
65
65
  end
@@ -72,7 +72,7 @@ def main
72
72
  modes.each do |mode|
73
73
  case mode
74
74
  when :text
75
- check_text files
75
+ check_text(files)
76
76
  else
77
77
  raise 'must not happen'
78
78
  end
@@ -122,9 +122,9 @@ def words_re(rc)
122
122
  next if line[0, 1] == '#'
123
123
  if / !/ =~ line
124
124
  line, n = *line.split('!', 2)
125
- nega.push n.strip
125
+ nega.push(n.strip)
126
126
  end
127
- words.push line.strip
127
+ words.push(line.strip)
128
128
  end
129
129
  return Regexp.compile(words.join('|')),
130
130
  nega.empty? ? nil : Regexp.compile(nega.join('|'))
@@ -157,7 +157,7 @@ def each_paragraph(f)
157
157
  break if line.strip.empty?
158
158
  break if %r{\A(?:=|//[\w\}])} =~ line
159
159
  next if /\A\#@/ =~ line
160
- buf.push line.strip
160
+ buf.push(line.strip)
161
161
  end
162
162
  yield buf, lineno
163
163
  @review_utils_word_ok = nil
@@ -28,7 +28,7 @@ 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
33
  line.scan(/@<kw>\{(.*?)[,\}]/) { provide $1 }
34
34
  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
@@ -88,7 +88,7 @@ def _main
88
88
  compiler = ReVIEW::Compiler.new(load_strategy_class(@target, @check_only))
89
89
  result = compiler.compile(chap)
90
90
  if @output_filename
91
- write @output_filename, result
91
+ write(@output_filename, result)
92
92
  else
93
93
  puts result unless @check_only
94
94
  end
@@ -99,18 +99,18 @@ def _main
99
99
  compiler = ReVIEW::Compiler.new(load_strategy_class(@target, @check_only))
100
100
  book.chapters.each do |chap|
101
101
  str = compiler.compile(chap)
102
- write "#{chap.name}#{compiler.strategy.extname}", str unless @check_only
102
+ write("#{chap.name}#{compiler.strategy.extname}", str) unless @check_only
103
103
  end
104
104
  # PART
105
105
  book.parts_in_file.each do |part|
106
106
  str = compiler.compile(part)
107
- write "#{part.name}#{compiler.strategy.extname}", str unless @check_only
107
+ write("#{part.name}#{compiler.strategy.extname}", str) unless @check_only
108
108
  end
109
109
  else
110
110
  raise "must not happen: #{@mode}"
111
111
  end
112
- rescue ReVIEW::ApplicationError => err
113
- error(err.message)
112
+ rescue ReVIEW::ApplicationError => e
113
+ error(e.message)
114
114
  end
115
115
  end
116
116
 
@@ -162,20 +162,20 @@ def parse_opts
162
162
  raise OptionParser::ParseError, 'no target given'
163
163
  end
164
164
  end
165
- rescue OptionParser::ParseError => err
166
- warn(err.message)
165
+ rescue OptionParser::ParseError => e
166
+ warn(e.message)
167
167
  $stderr.puts opts.help
168
168
  exit 1
169
169
  end
170
170
  end
171
171
 
172
172
  def error(msg)
173
- @logger.error "#{File.basename($PROGRAM_NAME, '.*')}: #{msg}"
173
+ @logger.error msg
174
174
  exit 1
175
175
  end
176
176
 
177
177
  def warn(msg)
178
- @logger.warn "#{File.basename($PROGRAM_NAME, '.*')}: #{msg}"
178
+ @logger.warn msg
179
179
  end
180
180
 
181
181
  def load_strategy_class(target, strict)
@@ -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)
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
  #
3
- # Copyright (c) 2010-2014 Minero Aoki, Kenshi Muto
3
+ # Copyright (c) 2010-2019 Minero Aoki, Kenshi Muto
4
4
  # 1999-2007 Minero Aoki
5
5
  #
6
6
  # This program is free software.
@@ -39,7 +39,7 @@ def main
39
39
  if ENV['REVIEW_SAFE_MODE'].to_i & 2 > 0
40
40
  @logger.warn 'review-preproc-ext.rb is prohibited in safe mode. ignored.'
41
41
  else
42
- Kernel.load File.expand_path('review-preproc-ext.rb')
42
+ Kernel.load(File.expand_path('review-preproc-ext.rb'))
43
43
  end
44
44
  end
45
45
 
@@ -52,7 +52,6 @@ def main
52
52
  opts.on('-c', '--check', 'Check if preprocess is needed.') { mode = :check }
53
53
  opts.on('-d', '--diff', 'Show diff from current file.') { mode = :diff }
54
54
  opts.on('--replace', 'Replace file by preprocessed one.') { mode = :replace }
55
- opts.on('-s', '--strip', 'Strip preprocessor tags.') { mode = :strip }
56
55
  opts.on('--tabwidth=WIDTH', "Replace tabs with space characters. (0: don't replace)") { |width| param['tabwidth'] = width.to_i }
57
56
  opts.on('--help', 'Print this message and quit.') do
58
57
  puts opts.help
@@ -60,8 +59,8 @@ def main
60
59
  end
61
60
  begin
62
61
  opts.parse!
63
- rescue OptionParser::ParseError => err
64
- @logger.error err.message
62
+ rescue OptionParser::ParseError => e
63
+ @logger.error e.message
65
64
  $stderr.puts opts.help
66
65
  exit 1
67
66
  end
@@ -72,39 +71,35 @@ def main
72
71
  current_file = path
73
72
  case mode
74
73
  when :output
75
- File.open(path) { |f| pp.process f, $stdout }
74
+ File.open(path) { |f| pp.process(f, $stdout) }
76
75
  when :replace
77
- File.write "#{path}.pptmp", preproc(pp, path)
78
- File.rename "#{path}.pptmp", path
76
+ File.write("#{path}.pptmp", preproc(pp, path))
77
+ File.rename("#{path}.pptmp", path)
79
78
  when :diff, :check
80
79
  tmp = '/tmp/review.pptmp'
81
80
  begin
82
- File.write tmp, preproc(pp, path)
81
+ File.write(tmp, preproc(pp, path))
83
82
  if mode == :check
84
- system "diff -qu #{path} #{tmp} >/dev/null || echo #{path}"
83
+ system("diff -qu #{path} #{tmp} >/dev/null || echo #{path}")
85
84
  else
86
- system "diff -u #{path} #{tmp}"
85
+ system("diff -u #{path} #{tmp}")
87
86
  end
88
87
  ensure
89
- FileUtils.rm_f tmp
90
- end
91
- when :strip
92
- File.open(path) do |f|
93
- ReVIEW::Preprocessor::Strip.new(f).each { |line| puts line }
88
+ FileUtils.rm_f(tmp)
94
89
  end
95
90
  else
96
91
  raise "must not happen: #{mode}"
97
92
  end
98
93
  end
99
- rescue ReVIEW::Error => err
94
+ rescue ReVIEW::Error => e
100
95
  raise if $DEBUG
101
- @logger.error err.message
96
+ @logger.error e.message
102
97
  exit 1
103
98
  end
104
99
 
105
100
  def preproc(pp, path)
106
101
  buf = StringIO.new
107
- File.open(path) { |f| pp.process f, buf }
102
+ File.open(path) { |f| pp.process(f, buf) }
108
103
  buf.string
109
104
  end
110
105
 
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
- # Copyright (c) 2010-2017 Kenshi Muto
2
+ # Copyright (c) 2010-2019 Kenshi Muto
3
3
  #
4
4
  # This program is free software
5
5
  # You can distribute or modify this program under the terms of
@@ -30,7 +30,7 @@ ARGF.each do |line|
30
30
  @logger.warn "#{ln}: block #{new_block} started, but previous block #{block} didn't close yet."
31
31
  end
32
32
  block = new_block
33
- elsif line =~ %r{\A//\}}
33
+ elsif line.start_with?('//}')
34
34
  if block.nil?
35
35
  @logger.warn "#{ln}: block ended, but not opened."
36
36
  end
@@ -48,7 +48,7 @@ ARGF.each do |line|
48
48
  @logger.warn "#{ln}: found '*' without the head space. Is it correct?"
49
49
  end
50
50
  elsif line =~ /\A\s+(\d+\.)\s+/ && line =~ /\A\s+\*\s+/
51
- unless Tw[list emlist listnum emlistnum cmd image table].include?(block)
51
+ unless %w[list emlist listnum emlistnum cmd image table].include?(block)
52
52
  @logger.warn "#{ln}: found itemized list or numbered list in #{block}. Is it correct?"
53
53
  end
54
54
  elsif block == 'table'
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
  #
3
- # Copyright (c) 2014-2017 Minero Aoki, Kenshi Muto
3
+ # Copyright (c) 2014-2020 Minero Aoki, Kenshi Muto
4
4
  # 2003-2014 Minero Aoki
5
5
  #
6
6
  # This program is free software.
@@ -14,82 +14,8 @@ require 'pathname'
14
14
  bindir = Pathname.new(__FILE__).realpath.dirname
15
15
  $LOAD_PATH.unshift((bindir + '../lib').realpath)
16
16
 
17
- require 'review'
18
- require 'optparse'
17
+ require 'review/volumeprinter'
19
18
 
20
- include ReVIEW::TextUtils
21
-
22
- def main
23
- @logger = ReVIEW.logger
24
- @config = ReVIEW::Configure.values
25
-
26
- part_sensitive = false
27
- basedir = nil
28
- yamlfile = 'config.yml'
29
- opts = OptionParser.new
30
- opts.version = ReVIEW::VERSION
31
- opts.on('--yaml=YAML', 'Read configurations from YAML file.') { |yaml| yamlfile = yaml }
32
- opts.on('-P', '--part-sensitive', 'Prints volume of each parts.') { part_sensitive = true }
33
- opts.on('--directory=DIR', 'Compile all chapters in DIR.') { |path| basedir = path }
34
- opts.on('--help', 'Print this message and quit') do
35
- puts opts.help
36
- exit 0
37
- end
38
- begin
39
- opts.parse!
40
- rescue OptionParser::ParseError => err
41
- @logger.error err.message
42
- $stderr.puts opts.help
43
- exit 1
44
- end
45
-
46
- book = basedir ? ReVIEW::Book.load(basedir) : ReVIEW::Book::Base.load
47
- book.config = @config
48
- if yamlfile
49
- book.load_config(yamlfile)
50
- end
51
-
52
- if part_sensitive
53
- sep = ''
54
- book.each_part do |part|
55
- print sep
56
- sep = "\n"
57
- if part.number
58
- puts "Part #{part.number} #{part.name}"
59
- end
60
- part.each_chapter do |chap|
61
- print_chapter_volume chap
62
- end
63
- puts ' --------------------'
64
- print_volume part.volume
65
- end
66
- else
67
- book.each_chapter do |chap|
68
- print_chapter_volume chap
69
- end
70
- end
71
- puts '============================='
72
- print_volume book.volume # puts "Total #{book.volume}"
73
- rescue ReVIEW::ApplicationError, Errno::ENOENT => err
74
- raise if $DEBUG
75
- @logger.error "#{File.basename($PROGRAM_NAME)}: #{err.message}"
76
- exit 1
77
- end
78
-
79
- def print_chapter_volume(chap)
80
- vol = chap.volume
81
- title = chap.title
82
- printf "%s %3dKB %6dC %5dL %3dP %s %-s\n",
83
- chapnumstr(chap.number), vol.kbytes, vol.chars, vol.lines, vol.page,
84
- "#{chap.name} ".ljust(25, '.'), title
19
+ if File.basename($PROGRAM_NAME) == File.basename(__FILE__)
20
+ ReVIEW::VolumePrinter.execute(*ARGV)
85
21
  end
86
-
87
- def print_volume(vol)
88
- printf " %3dKB %6dC %5dL %3dP\n", vol.kbytes, vol.chars, vol.lines, vol.page
89
- end
90
-
91
- def chapnumstr(n)
92
- n ? sprintf('%2d.', n) : ' '
93
- end
94
-
95
- main