review 2.3.0 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (160) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +90 -66
  3. data/.travis.yml +1 -1
  4. data/Gemfile +0 -1
  5. data/NEWS.ja.md +82 -0
  6. data/NEWS.md +83 -0
  7. data/README.md +5 -3
  8. data/Rakefile +8 -8
  9. data/bin/review +1 -5
  10. data/bin/review-catalog-converter +22 -27
  11. data/bin/review-check +36 -43
  12. data/bin/review-checkdep +10 -15
  13. data/bin/review-compile +37 -55
  14. data/bin/review-epubmaker +4 -5
  15. data/bin/review-index +21 -29
  16. data/bin/review-init +26 -37
  17. data/bin/review-pdfmaker +0 -2
  18. data/bin/review-preproc +25 -45
  19. data/bin/review-validate +19 -18
  20. data/bin/review-vol +15 -27
  21. data/doc/config.yml.sample +5 -2
  22. data/doc/format.ja.md +20 -1
  23. data/doc/format.md +21 -5
  24. data/doc/images/review-generate.png +0 -0
  25. data/lib/epubmaker.rb +1 -3
  26. data/lib/epubmaker/content.rb +24 -27
  27. data/lib/epubmaker/epubcommon.rb +135 -148
  28. data/lib/epubmaker/epubv2.rb +39 -46
  29. data/lib/epubmaker/epubv3.rb +93 -103
  30. data/lib/epubmaker/producer.rb +138 -151
  31. data/lib/epubmaker/zip_exporter.rb +21 -26
  32. data/lib/review/book.rb +3 -6
  33. data/lib/review/book/base.rb +78 -103
  34. data/lib/review/book/chapter.rb +36 -40
  35. data/lib/review/book/compilable.rb +28 -31
  36. data/lib/review/book/image_finder.rb +6 -13
  37. data/lib/review/book/index.rb +100 -121
  38. data/lib/review/book/page_metric.rb +2 -7
  39. data/lib/review/book/part.rb +18 -20
  40. data/lib/review/book/volume.rb +9 -13
  41. data/lib/review/builder.rb +81 -116
  42. data/lib/review/catalog.rb +15 -19
  43. data/lib/review/compiler.rb +64 -83
  44. data/lib/review/configure.rb +87 -97
  45. data/lib/review/converter.rb +2 -7
  46. data/lib/review/epubbuilder.rb +1 -3
  47. data/lib/review/epubmaker.rb +213 -205
  48. data/lib/review/exception.rb +2 -4
  49. data/lib/review/extentions.rb +0 -1
  50. data/lib/review/extentions/hash.rb +2 -2
  51. data/lib/review/extentions/string.rb +5 -30
  52. data/lib/review/htmlbuilder.rb +320 -375
  53. data/lib/review/htmltoc.rb +4 -7
  54. data/lib/review/htmlutils.rb +29 -32
  55. data/lib/review/i18n.rb +33 -44
  56. data/lib/review/i18n.yml +3 -3
  57. data/lib/review/idgxmlbuilder.rb +309 -345
  58. data/lib/review/latexbuilder.rb +175 -212
  59. data/lib/review/latexindex.rb +2 -8
  60. data/lib/review/latexutils.rb +33 -43
  61. data/lib/review/lineinput.rb +1 -1
  62. data/lib/review/logger.rb +21 -0
  63. data/lib/review/makerhelper.rb +1 -4
  64. data/lib/review/markdownbuilder.rb +44 -53
  65. data/lib/review/md2inaobuilder.rb +6 -12
  66. data/lib/review/pdfmaker.rb +143 -173
  67. data/lib/review/preprocessor.rb +64 -101
  68. data/lib/review/rstbuilder.rb +126 -158
  69. data/lib/review/sec_counter.rb +18 -34
  70. data/lib/review/template.rb +4 -5
  71. data/lib/review/textbuilder.rb +2 -3
  72. data/lib/review/textutils.rb +7 -13
  73. data/lib/review/tocparser.rb +31 -56
  74. data/lib/review/tocprinter.rb +26 -52
  75. data/lib/review/topbuilder.rb +219 -247
  76. data/lib/review/unfold.rb +15 -24
  77. data/lib/review/version.rb +1 -1
  78. data/lib/review/webmaker.rb +75 -99
  79. data/lib/review/webtocprinter.rb +15 -20
  80. data/lib/review/yamlloader.rb +13 -15
  81. data/review.gemspec +20 -22
  82. data/templates/latex/layout.tex.erb +2 -2
  83. data/templates/opf/epubv2.opf.erb +7 -7
  84. data/templates/opf/epubv3.opf.erb +7 -7
  85. data/templates/web/html/layout-html5.html.erb +2 -2
  86. data/test/assets/black.eps +280 -0
  87. data/test/assets/fit.png +0 -0
  88. data/test/assets/large.gif +0 -0
  89. data/test/assets/large.jpg +0 -0
  90. data/test/assets/large.png +0 -0
  91. data/test/assets/large.svg +65 -0
  92. data/test/assets/test_template.tex +1 -1
  93. data/test/book_test_helper.rb +2 -2
  94. data/test/run_test.rb +4 -4
  95. data/test/sample-book/src/Rakefile +21 -22
  96. data/test/syntax-book/Gemfile +4 -0
  97. data/test/syntax-book/Rakefile +72 -0
  98. data/test/syntax-book/appA.re +22 -0
  99. data/test/syntax-book/bib.re +6 -0
  100. data/test/syntax-book/catalog.yml +15 -0
  101. data/test/syntax-book/ch01.re +136 -0
  102. data/test/syntax-book/ch02.re +351 -0
  103. data/test/syntax-book/ch03.re +82 -0
  104. data/test/syntax-book/config.yml +35 -0
  105. data/test/syntax-book/images/ball.png +0 -0
  106. data/test/syntax-book/images/cover.jpg +0 -0
  107. data/test/syntax-book/images/fractal.png +0 -0
  108. data/test/syntax-book/images/img3-1.png +0 -0
  109. data/test/syntax-book/images/inlineicon.jpg +0 -0
  110. data/test/syntax-book/images/logic.png +0 -0
  111. data/test/syntax-book/images/logic2.png +0 -0
  112. data/test/syntax-book/images/puzzle.jpg +0 -0
  113. data/test/syntax-book/images/table.jpg +0 -0
  114. data/test/syntax-book/part2.re +6 -0
  115. data/test/syntax-book/pre01.re +26 -0
  116. data/test/syntax-book/review-ext.rb +14 -0
  117. data/test/syntax-book/sty/jumoline.sty +310 -0
  118. data/test/syntax-book/sty/reviewmacro.sty +39 -0
  119. data/test/syntax-book/style.css +494 -0
  120. data/test/syntax-book/syntax.dic +2 -0
  121. data/test/test_book.rb +106 -111
  122. data/test/test_book_chapter.rb +21 -22
  123. data/test/test_book_part.rb +3 -5
  124. data/test/test_builder.rb +11 -22
  125. data/test/test_catalog.rb +17 -18
  126. data/test/test_catalog_converter_cmd.rb +5 -5
  127. data/test/test_compiler.rb +18 -16
  128. data/test/test_configure.rb +35 -38
  129. data/test/test_converter.rb +3 -4
  130. data/test/test_epub3maker.rb +136 -117
  131. data/test/test_epubmaker.rb +107 -114
  132. data/test/test_epubmaker_cmd.rb +2 -4
  133. data/test/test_extentions_hash.rb +32 -33
  134. data/test/test_helper.rb +9 -11
  135. data/test/test_htmlbuilder.rb +454 -420
  136. data/test/test_htmltoc.rb +8 -12
  137. data/test/test_htmlutils.rb +0 -2
  138. data/test/test_i18n.rb +159 -150
  139. data/test/test_idgxmlbuilder.rb +190 -197
  140. data/test/test_image_finder.rb +21 -22
  141. data/test/test_index.rb +24 -29
  142. data/test/test_latexbuilder.rb +274 -264
  143. data/test/test_lineinput.rb +7 -10
  144. data/test/test_location.rb +7 -7
  145. data/test/test_makerhelper.rb +13 -25
  146. data/test/test_markdownbuilder.rb +23 -26
  147. data/test/test_md2inaobuilder.rb +8 -11
  148. data/test/test_pdfmaker.rb +114 -123
  149. data/test/test_pdfmaker_cmd.rb +1 -3
  150. data/test/test_review_ext.rb +3 -5
  151. data/test/test_rstbuilder.rb +92 -97
  152. data/test/test_template.rb +3 -7
  153. data/test/test_textutils.rb +27 -27
  154. data/test/test_tocparser.rb +2 -2
  155. data/test/test_topbuilder.rb +98 -103
  156. data/test/test_webtocprinter.rb +5 -6
  157. data/test/test_yamlloader.rb +42 -42
  158. data/test/test_zip_exporter.rb +12 -18
  159. metadata +86 -9
  160. data/lib/review/ewbbuilder.rb +0 -382
data/NEWS.md CHANGED
@@ -1,3 +1,86 @@
1
+ # Version 2.4.0
2
+
3
+ ## New Features
4
+
5
+ * use built-in Logger class for warns and errors ([#705])
6
+ * EPUBMaker: warn of large images because of rejecting ebook stores ([#819])
7
+ * LATEXBuilder: add new inline command `@<pageref>` ([#836])
8
+ * support inline notaion `| |` and `$ $` instead of `{}` to surpress escaping `}` ([#876])
9
+
10
+ ## Breaking Changes
11
+
12
+ * LATEXBuilder: use Roman numerals as part numbers ([#837])
13
+ * EPUBMaker: TOC should be after frontmatter ([#840])
14
+ * `imgmath` uses folder `images/_review_math`, not `images` directly ([#856])
15
+ * EPUBMaker: default value of titlepage is `true`, not `null` ([#862])
16
+ * EPUBMaker: `params` in template files should be `config` ([#867])
17
+ * EWBBuilder is removed because nobody maintained it ([#828])
18
+
19
+ ## Bug Fixes
20
+
21
+ * fix misrecognition of HeadlineIndex ([#121])
22
+ * TOPBuilder: fix metric parameter in `//image` and `//indepimage` ([#805])
23
+ * fix refering columns in other chapters ([#817])
24
+ * use execution date when `date` in config.yml is empty ([#824])
25
+ * fix I18N messages of `listref`, `imgref`, and `tableref` in frontmatters and backmatters ([#830])
26
+ * WebMaker: fix booktitle using Hash ([#831])
27
+ * LATEXBuilder: use lmodern package to avoid to use Type3 font in Western languages ([#843])
28
+ * fix broken title using `/` in config.yml ([#852])
29
+ * PDFMaker: fix toclevel ([#846])
30
+
31
+ ## Enhancements
32
+
33
+ * allow block `{ 〜 //}` in `//indepimage`. ([#802])
34
+ * warn when images are not found in `//indepimage`([#803])
35
+ * LATEXBuilder: allow caption in `//source` ([#834])
36
+
37
+ ## Docs
38
+
39
+ * add that installing LaTeX environments is needed to use `rake pdf` ([#800])
40
+ * fix links in README.md ([#815])
41
+ * add sample document to test commands of Re:VIEW ([#833])
42
+ * fix comment of `titlepage` in config.yml ([#847])
43
+ * fix description of `footnotetext` ([#872])
44
+
45
+ ## Others
46
+
47
+ * fix coding rules to surpress rubocop v0.50.0 ([#823])
48
+
49
+ ## Contributors
50
+
51
+ * [@ryota-murakami](https://github.com/ryota-murakami)
52
+ * [@nasum](https://github.com/nasum)
53
+ * [@kokuyouwind](https://github.com/kokuyouwind)
54
+
55
+ [#121]: https://github.com/kmuto/review/issues/121
56
+ [#705]: https://github.com/kmuto/review/issues/705
57
+ [#800]: https://github.com/kmuto/review/pull/800
58
+ [#802]: https://github.com/kmuto/review/issues/802
59
+ [#803]: https://github.com/kmuto/review/issues/803
60
+ [#805]: https://github.com/kmuto/review/pull/805
61
+ [#815]: https://github.com/kmuto/review/pull/815
62
+ [#817]: https://github.com/kmuto/review/pull/817
63
+ [#819]: https://github.com/kmuto/review/issues/819
64
+ [#823]: https://github.com/kmuto/review/issues/823
65
+ [#824]: https://github.com/kmuto/review/issues/824
66
+ [#828]: https://github.com/kmuto/review/pull/828
67
+ [#830]: https://github.com/kmuto/review/pull/830
68
+ [#831]: https://github.com/kmuto/review/pull/831
69
+ [#833]: https://github.com/kmuto/review/pull/833
70
+ [#834]: https://github.com/kmuto/review/issues/834
71
+ [#836]: https://github.com/kmuto/review/issues/836
72
+ [#840]: https://github.com/kmuto/review/pull/840
73
+ [#843]: https://github.com/kmuto/review/issues/843
74
+ [#837]: https://github.com/kmuto/review/issues/837
75
+ [#846]: https://github.com/kmuto/review/issues/846
76
+ [#847]: https://github.com/kmuto/review/pull/847
77
+ [#852]: https://github.com/kmuto/review/issues/852
78
+ [#856]: https://github.com/kmuto/review/issues/856
79
+ [#862]: https://github.com/kmuto/review/pull/862
80
+ [#867]: https://github.com/kmuto/review/issues/867
81
+ [#872]: https://github.com/kmuto/review/issues/872
82
+ [#876]: https://github.com/kmuto/review/issues/876
83
+
1
84
  # Version 2.3.0
2
85
 
3
86
  ## New Features
data/README.md CHANGED
@@ -6,7 +6,9 @@
6
6
 
7
7
  Re:VIEW is an easy-to-use digital publishing system for paper books and ebooks.
8
8
 
9
- ## Supported Format
9
+ ## Supported Formats
10
+
11
+ ![supported formats](./doc/images/review-generate.png)
10
12
 
11
13
  Output formats Re:VIEW supports are:
12
14
 
@@ -55,10 +57,10 @@ $ review-init hello
55
57
  $ cd hello
56
58
  $ (... add and edit *.re file, config.yml and catalog.yml ...)
57
59
  $ rake epub ## generating EPUB
58
- $ rake pdf ## generating PDF
60
+ $ rake pdf ## generating PDF(Requirement TeX)
59
61
  ```
60
62
 
61
- For further information, see [doc/quickstart.md](https://github.com/kmuto/review/blob/readme-md/doc/quickstart.md)
63
+ For further information, see [doc/quickstart.md](https://github.com/kmuto/review/blob/master/doc/quickstart.md)
62
64
 
63
65
  ## Resources
64
66
 
data/Rakefile CHANGED
@@ -3,26 +3,26 @@ begin
3
3
  Bundler::GemHelper.install_tasks
4
4
  rescue LoadError
5
5
  # ignore if bundler does not exist
6
- warn "Bundler not found"
6
+ warn 'Bundler not found'
7
7
  end
8
8
 
9
9
  require 'rubygems'
10
10
  require 'rake/clean'
11
11
 
12
- task :default => [:test, :rubocop]
12
+ task default: %i[test rubocop]
13
13
 
14
- desc "Check with rubocop"
14
+ desc 'Check with rubocop'
15
15
  task :rubocop do
16
16
  begin
17
17
  require 'rubocop/rake_task'
18
18
  RuboCop::RakeTask.new
19
19
  rescue LoadError
20
- warn "rubocop not found"
20
+ warn 'rubocop not found'
21
21
  end
22
22
  end
23
23
 
24
24
  task :test do
25
- ruby("test/run_test.rb")
25
+ ruby('test/run_test.rb')
26
26
  end
27
27
 
28
28
  begin
@@ -35,18 +35,18 @@ begin
35
35
  t.verbose = true
36
36
  end
37
37
  rescue LoadError
38
- warn "rcov not found"
38
+ warn 'rcov not found'
39
39
  end
40
40
 
41
41
  begin
42
42
  require 'rdoc/task'
43
43
  Rake::RDocTask.new do |rdoc|
44
- version = File.exist?('VERSION') ? File.read('VERSION') : ""
44
+ version = File.exist?('VERSION') ? File.read('VERSION') : ''
45
45
  rdoc.rdoc_dir = 'rdoc'
46
46
  rdoc.title = "review #{version}"
47
47
  rdoc.rdoc_files.include('README*')
48
48
  rdoc.rdoc_files.include('lib/**/*.rb')
49
49
  end
50
50
  rescue LoadError
51
- warn "rdoc not found"
51
+ warn 'rdoc not found'
52
52
  end
data/bin/review CHANGED
@@ -1,5 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
-
3
2
  #
4
3
  # review: Wrapper command to call subcommand
5
4
  #
@@ -35,12 +34,9 @@ command = "review-#{ARGV.shift}"
35
34
  bindir = Pathname.new(__FILE__).realpath.dirname
36
35
  command_path = File.join(bindir, command)
37
36
 
38
- if !File.exist?(command_path)
37
+ unless File.exist?(command_path)
39
38
  print "cannot find command: #{command}\n\n"
40
39
  usage
41
40
  end
42
41
 
43
42
  exec(command_path, *ARGV)
44
-
45
-
46
-
@@ -1,7 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
- # -*- coding: utf-8 -*-
3
2
  #
4
- # Copyright (c) 2014 Masanori Kado
3
+ # Copyright (c) 2014-2017 Masanori Kado, Kenshi Muto
5
4
  #
6
5
  # This program is free software.
7
6
  # You can distribute or modify this program under the terms of
@@ -16,11 +15,13 @@ bindir = Pathname.new(__FILE__).realpath.dirname
16
15
  $LOAD_PATH.unshift((bindir + '../lib').realpath)
17
16
  require 'review/version'
18
17
  require 'review/extentions'
18
+ require 'review/logger'
19
19
 
20
20
  def main
21
+ @logger = ReVIEW.logger
21
22
  opts = OptionParser.new
22
23
  opts.version = ReVIEW::VERSION
23
- opts.banner = "Usage: #{File.basename($0)} dirname"
24
+ opts.banner = "Usage: #{File.basename($PROGRAM_NAME)} dirname"
24
25
  opts.on('-h', '--help', 'print this message and quit.') do
25
26
  puts opts.help
26
27
  exit 0
@@ -29,7 +30,7 @@ def main
29
30
  begin
30
31
  opts.parse!
31
32
  rescue OptionParser::ParseError => err
32
- $stderr.puts err.message
33
+ @logger.error err.message
33
34
  $stderr.puts opts.help
34
35
  exit 1
35
36
  end
@@ -39,19 +40,19 @@ def main
39
40
  # confirmation
40
41
  if File.exist?("#{dir}/catalog.yml")
41
42
  loop do
42
- print "The catalog.yml already exists. Do you want to overwrite it? [y/n]"
43
+ print 'The catalog.yml already exists. Do you want to overwrite it? [y/n]'
43
44
  case gets
44
- when /^[yY]/
45
- puts "Start writing..."
45
+ when /\A[yY]/
46
+ @logger.info 'Start writing...'
46
47
  break
47
- when /^[nN]/, /^$/
48
- puts "bye."
48
+ when /\A[nN]/, /\A\Z/
49
+ @logger.info 'bye.'
49
50
  exit
50
51
  end
51
52
  end
52
53
  end
53
54
 
54
- File.open("#{dir}/catalog.yml", "w") do |catalog|
55
+ File.open("#{dir}/catalog.yml", 'w') do |catalog|
55
56
  # predef
56
57
  if File.exist?("#{dir}/PREDEF")
57
58
  catalog << parse_predef(File.open("#{dir}/PREDEF").read)
@@ -69,12 +70,12 @@ def main
69
70
  if File.exist?("#{dir}/POSTDEF")
70
71
  postdef = File.open("#{dir}/POSTDEF").read
71
72
  loop do
72
- print "Do you want to convert POSTDEF into APPENDIX? [y/n]"
73
+ print 'Do you want to convert POSTDEF into APPENDIX? [y/n]'
73
74
  case gets
74
- when /^[yY]/
75
+ when /\A[yY]/
75
76
  catalog << parse_postdef(postdef, true)
76
77
  break
77
- when /^[nN]/, /^$/
78
+ when /\A[nN]/, /\A\Z/
78
79
  catalog << parse_postdef(postdef)
79
80
  break
80
81
  end
@@ -85,9 +86,9 @@ def main
85
86
  puts File.open("#{dir}/catalog.yml").read
86
87
  end
87
88
 
88
- def _parse(str, header)
89
+ def parse_internal(str, header)
89
90
  if str.present?
90
- header + str.split("\n").map{|i| " - #{i}\n" }.join
91
+ header + str.split("\n").map { |i| " - #{i}\n" }.join
91
92
  else
92
93
  header
93
94
  end
@@ -95,12 +96,12 @@ end
95
96
 
96
97
  def parse_predef(str)
97
98
  header = "PREDEF:\n"
98
- _parse(str, header) + "\n"
99
+ parse_internal(str, header) + "\n"
99
100
  end
100
101
 
101
102
  def parse_chaps(str)
102
103
  header = "CHAPS:\n"
103
- _parse(str, header) + "\n"
104
+ parse_internal(str, header) + "\n"
104
105
  end
105
106
 
106
107
  def parse_postdef(str, to_appendix = false)
@@ -109,21 +110,15 @@ def parse_postdef(str, to_appendix = false)
109
110
  else
110
111
  header = "POSTDEF:\n"
111
112
  end
112
- _parse(str, header) + "\n"
113
+ parse_internal(str, header) + "\n"
113
114
  end
114
115
 
115
116
  def parse_parts(parts_str, chaps_str)
116
- if parts_str.blank? or chaps_str.blank?
117
- return "CHAPS:\n\n"
118
- end
117
+ return "CHAPS:\n\n" if parts_str.blank? or chaps_str.blank?
119
118
 
120
119
  parts = parts_str.split("\n")
121
120
  chaps = chaps_str.split("\n\n")
122
- "CHAPS:\n" + parts.zip(chaps).map{|k, vs|
123
- " - #{k}:\n" + vs.split("\n").map{|i| " - #{i}\n"}.join
124
- }.join + "\n"
121
+ "CHAPS:\n" + parts.zip(chaps).map { |k, vs| " - #{k}:\n" + vs.split("\n").map { |i| " - #{i}\n" }.join }.join + "\n"
125
122
  end
126
123
 
127
- if File.basename($0) == File.basename(__FILE__)
128
- main()
129
- end
124
+ main if File.basename($PROGRAM_NAME) == File.basename(__FILE__)
@@ -1,8 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
  #
3
- #
4
- # Copyright (c) 1999-2007 Minero Aoki
5
- # Copyright (c) 2010-2014 Kenshi Muto, Minero Aoki
3
+ # Copyright (c) 2010-2017 Kenshi Muto, Minero Aoki
4
+ # 1999-2007 Minero Aoki
6
5
  #
7
6
  # This program is free software.
8
7
  # You can distribute or modify this program under the terms of
@@ -35,34 +34,32 @@ def main
35
34
  @book = ReVIEW::Book::Base.load
36
35
  @book.config = @config
37
36
 
37
+ @logger = ReVIEW.logger
38
+
38
39
  modes = nil
39
40
  files = ARGV unless ARGV.empty?
40
41
  opts = OptionParser.new
41
42
  opts.version = ReVIEW::VERSION
42
- opts.on('-a', '--all-chapters', 'Check all chapters.') {
43
- files = @book.chapters.map {|ent| ent.path }
44
- }
45
- opts.on('-s', '--section N', 'Check section N. (deprecated)') {|n|
43
+ opts.on('-a', '--all-chapters', 'Check all chapters.') { files = @book.chapters.map(&:path) }
44
+ opts.on('-s', '--section N', 'Check section N. (deprecated)') do |n|
46
45
  ents = @book.parts[Integer(n) - 1] or
47
- raise ReVIEW::ApplicationError, "section #{n} not exist"
48
- files = ents.map {|ent| ent.path }
49
- }
50
- opts.on('--text', 'Check text.') {
51
- (modes ||= []).push :text
52
- }
53
- opts.on('--help', 'print this message and quit.') {
46
+ raise ReVIEW::ApplicationError, "section #{n} not exist"
47
+ files = ents.map(&:path)
48
+ end
49
+ opts.on('--text', 'Check text.') { (modes ||= []).push :text }
50
+ opts.on('--help', 'print this message and quit.') do
54
51
  puts opts.help
55
52
  exit 0
56
- }
53
+ end
57
54
  begin
58
55
  opts.parse!
59
56
  rescue OptionParser::ParseError => err
60
- $stderr.puts err.message
61
- $stderr.puts opts.help
57
+ @logger.error(err.message)
58
+ puts opts.help
62
59
  exit 1
63
60
  end
64
61
  unless files
65
- $stderr.puts "no input"
62
+ @logger.error('no input')
66
63
  exit 1
67
64
  end
68
65
  modes ||= [:text]
@@ -80,31 +77,28 @@ end
80
77
  def check_text(files)
81
78
  re, neg = words_re("#{@book.basedir}/#{@book.reject_file}")
82
79
  files.each do |path|
83
- File.open(path) {|f|
80
+ File.open(path) do |f|
84
81
  each_paragraph(f) do |para, lineno|
85
- s = para.join('')
86
- if m = re.match(s)
87
- next if m[0] == @review_utils_word_ok
88
- next if neg and neg =~ s
89
- str, offset = find_line(para, re)
90
- out = sprintf("%s:%d: %s\n", path, lineno + offset, str)
91
- print out
92
- end
82
+ s = para.join
83
+ m = re.match(s)
84
+ next if m.nil? || m[0] == @review_utils_word_ok
85
+ next if neg and neg =~ s
86
+ str, offset = find_line(para, re)
87
+ out = sprintf("%s:%d: %s\n", path, lineno + offset, str)
88
+ print out
93
89
  end
94
- }
90
+ end
95
91
  end
96
92
  end
97
93
 
98
94
  def find_line(lines, re)
99
95
  # single line?
100
- lines.each_with_index do |line, idx|
101
- return line.gsub(re, '<<<\&>>>'), idx if re =~ line
102
- end
96
+ lines.each_with_index { |line, idx| return line.gsub(re, '<<<\&>>>'), idx if re =~ line }
103
97
 
104
98
  # multiple lines?
105
99
  i = 0
106
100
  while i < lines.size - 1
107
- str = lines[i] + lines[i+1]
101
+ str = lines[i] + lines[i + 1]
108
102
  return str.gsub(re, '<<<\&>>>'), i if re =~ str
109
103
  i += 1
110
104
  end
@@ -116,15 +110,14 @@ def words_re(rc)
116
110
  words = []
117
111
  nega = []
118
112
  File.foreach(rc) do |line|
119
- next if line[0,1] == '#'
113
+ next if line[0, 1] == '#'
120
114
  if / !/ =~ line
121
- line, n = *line.split(/!/, 2)
115
+ line, n = *line.split('!', 2)
122
116
  nega.push n.strip
123
117
  end
124
118
  words.push line.strip
125
119
  end
126
- return Regexp.compile(words.join('|')),
127
- nega.empty?() ? nil : Regexp.compile(nega.join('|'))
120
+ [Regexp.compile(words.join('|')), nega.empty? ? nil : Regexp.compile(nega.join('|'))]
128
121
  end
129
122
 
130
123
  def each_paragraph(f)
@@ -135,23 +128,25 @@ def each_paragraph(f)
135
128
  @review_utils_word_ok = $1
136
129
  when /\A\#@/
137
130
  # do nothing
138
- when %r[\A//caption\{(.*?)//\}]
131
+ next
132
+ when %r{\A//caption\{(.*?)//\}}
139
133
  yield [$1], f.filename, f.lineno
140
134
  when %r<\A//\w.*\{\s*\z>
141
135
  while line = f.gets
142
- break if %r<//\}> === line
136
+ break if %r{//\}} === line
143
137
  end
144
138
  when /\A=/
145
139
  yield [line.slice(/\A=+(?:\[.*?\])?\s+(.*)/, 1).strip], f.lineno
146
140
  when /\A\s*\z/
147
141
  # skip
142
+ next
148
143
  else
149
144
  buf = [line.strip]
150
145
  lineno = f.lineno
151
146
  while line = f.gets
152
147
  break if line.strip.empty?
153
- break if %r<\A(?:=|//[\w\}])> =~ line
154
- next if %r<\A\#@> =~ line
148
+ break if %r{\A(?:=|//[\w\}])} =~ line
149
+ next if /\A\#@/ =~ line
155
150
  buf.push line.strip
156
151
  end
157
152
  yield buf, lineno
@@ -161,9 +156,7 @@ def each_paragraph(f)
161
156
  end
162
157
 
163
158
  def each_paragraph_line(f, &block)
164
- each_paragraph(f) do |para, *|
165
- para.each(&block)
166
- end
159
+ each_paragraph(f) { |para, *| para.each(&block) }
167
160
  end
168
161
 
169
162
  sigmain