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
@@ -1,8 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
  #
3
- # $Id: review-checkdep 3748 2007-12-24 07:06:06Z aamine $
4
- #
5
- # Copyright (c) 1999-2007 Minero Aoki
3
+ # Copyright (c) 2007-2017 Minero Aoki, Kenshi Muto
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
@@ -15,42 +14,38 @@ require 'pathname'
15
14
  bindir = Pathname.new(__FILE__).realpath.dirname
16
15
  $LOAD_PATH.unshift((bindir + '../lib').realpath)
17
16
 
18
- PREDEF_FILE = 'PREDEF'
17
+ PREDEF_FILE = 'PREDEF'.freeze
19
18
 
20
19
  def main
21
- @provided = parse_predefined()
20
+ @provided = parse_predefined
22
21
  @unprovided = {}
23
22
  ARGF.each do |line|
24
23
  case line
25
24
  when /\A\#@require\((.*)\)/
26
25
  kw = $1
27
26
  unless @provided.key?(kw)
28
- puts "#{location()}: not provided: #{kw}"
29
- @unprovided[kw] = location()
27
+ puts "#{location}: not provided: #{kw}"
28
+ @unprovided[kw] = location
30
29
  end
31
30
  when /\A\#@provide\((.*)\)/
32
31
  provide $1
33
32
  else
34
- line.scan(/@<kw>\{(.*?)[,\}]/) do
35
- provide $1
36
- end
33
+ line.scan(/@<kw>\{(.*?)[,\}]/) { provide $1 }
37
34
  end
38
35
  end
39
36
  end
40
37
 
41
38
  def provide(kw)
42
- @provided[kw] ||= location()
39
+ @provided[kw] ||= location
43
40
  if @unprovided[kw]
44
41
  reqpos = @unprovided.delete(kw)
45
- puts "#{location()}: provided now: #{kw} (#{reqpos})"
42
+ puts "#{location}: provided now: #{kw} (#{reqpos})"
46
43
  end
47
44
  end
48
45
 
49
46
  def parse_predefined
50
47
  result = {}
51
- File.foreach(PREDEF_FILE) do |line|
52
- result[line.strip] = '(predefined)'
53
- end
48
+ File.foreach(PREDEF_FILE) { |line| result[line.strip] = '(predefined)' }
54
49
  result
55
50
  rescue Errno::ENOENT
56
51
  return {}
@@ -1,7 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
2
  #
3
- # $Id: review-compile 4326 2010-01-12 14:10:17Z kmuto $
4
- #
5
3
  # Copyright (c) 2008-2017 Kenshi Muto, Masayoshi Takahashi, KADO Masanori, Minero Aoki
6
4
  # Copyright (c) 1999-2007 Minero Aoki
7
5
  #
@@ -21,7 +19,7 @@ require 'fileutils'
21
19
  require 'optparse'
22
20
  require 'yaml'
23
21
 
24
- DEFAULT_CONFIG_FILENAME = "config.yml"
22
+ DEFAULT_CONFIG_FILENAME = 'config.yml'.freeze
25
23
 
26
24
  def main
27
25
  Signal.trap(:INT) { exit 1 }
@@ -34,10 +32,11 @@ rescue Errno::EPIPE
34
32
  end
35
33
 
36
34
  def _main
35
+ @logger = ReVIEW.logger
37
36
  mode = :files
38
37
  basedir = nil
39
- if /\Areview2/ =~ File.basename($0)
40
- target = File.basename($0, '.rb').sub(/review2/, '')
38
+ if /\Areview2/ =~ File.basename($PROGRAM_NAME)
39
+ target = File.basename($PROGRAM_NAME, '.rb').sub('review2', '')
41
40
  else
42
41
  target = nil
43
42
  end
@@ -48,90 +47,79 @@ def _main
48
47
 
49
48
  opts = OptionParser.new
50
49
  opts.version = ReVIEW::VERSION
51
- opts.banner = "Usage: #{File.basename($0)} [--target=FMT]"
52
- opts.on('--yaml=YAML', 'Read configurations from YAML file.') {|yaml| config["yaml"] = yaml}
50
+ opts.banner = "Usage: #{File.basename($PROGRAM_NAME)} [--target=FMT]"
51
+ opts.on('--yaml=YAML', 'Read configurations from YAML file.') { |yaml| config['yaml'] = yaml }
53
52
  opts.on('-c', '--check', 'Check manuscript') { check_only = true }
54
- opts.on('--level=LVL', 'Section level to append number.') {|lvl| config["secnolevel"] = lvl.to_i }
55
- opts.on('--toclevel=LVL', 'Section level to append number.') {|lvl| config["toclevel"] = lvl.to_i }
56
- opts.on('--structuredxml', 'Produce XML with structured sections. (idgxml)') { config["structuredxml"] = true }
57
- opts.on('--table=WIDTH', 'Default table width. (idgxml)') {|tbl| config["tableopt"] = tbl }
58
- opts.on('--listinfo', 'Append listinfo tag to lists to indicate begin/end. (idgxml)') { config["listinfo"] = true }
59
- opts.on('--chapref="before,middle,after"', 'Chapref decoration. (idgxml)') {|cdec| config["chapref"] = cdec }
60
- opts.on('--chapterlink', 'make chapref hyperlink') { config["chapterlink"] = true }
61
- opts.on('--stylesheet=file', 'Stylesheet file for HTML (comma separated)') {|files| config["stylesheet"] = files.split(/\s*,\s*/) }
62
- opts.on('--mathml', 'Use MathML for TeX equation in HTML') do
63
- config["mathml"] = true
64
- end
53
+ opts.on('--level=LVL', 'Section level to append number.') { |lvl| config['secnolevel'] = lvl.to_i }
54
+ opts.on('--toclevel=LVL', 'Section level to append number.') { |lvl| config['toclevel'] = lvl.to_i }
55
+ opts.on('--structuredxml', 'Produce XML with structured sections. (idgxml)') { config['structuredxml'] = true }
56
+ opts.on('--table=WIDTH', 'Default table width. (idgxml)') { |tbl| config['tableopt'] = tbl }
57
+ opts.on('--listinfo', 'Append listinfo tag to lists to indicate begin/end. (idgxml)') { config['listinfo'] = true }
58
+ opts.on('--chapref="before,middle,after"', 'Chapref decoration. (idgxml)') { |cdec| config['chapref'] = cdec }
59
+ opts.on('--chapterlink', 'make chapref hyperlink') { config['chapterlink'] = true }
60
+ opts.on('--stylesheet=file', 'Stylesheet file for HTML (comma separated)') { |files| config['stylesheet'] = files.split(/\s*,\s*/) }
61
+ opts.on('--mathml', 'Use MathML for TeX equation in HTML') { config['mathml'] = true }
65
62
  opts.on('--htmlversion=VERSION', 'HTML version.') do |v|
66
63
  v = v.to_i
67
- config["htmlversion"] = v if v == 4 || v == 5
64
+ config['htmlversion'] = v if [4, 5].include?(v)
68
65
  end
69
66
  opts.on('--epubversion=VERSION', 'EPUB version.') do |v|
70
67
  v = v.to_i
71
- config["epubversion"] = v if v == 2 || v == 3
68
+ config['epubversion'] = v if [2, 3].include?(v)
72
69
  end
73
- opts.on('--target=FMT', 'Target format.') {|fmt| target = fmt } unless target
70
+ opts.on('--target=FMT', 'Target format.') { |fmt| target = fmt } unless target
74
71
  opts.on('--footnotetext',
75
- 'Use footnotetext and footnotemark instead of footnote (latex)') {
76
- config["footnotetext"] = true
77
- }
78
- opts.on('--draft', 'use draft mode(inline comment)') { config["draft"] = true }
72
+ 'Use footnotetext and footnotemark instead of footnote (latex)') { config['footnotetext'] = true }
73
+ opts.on('--draft', 'use draft mode(inline comment)') { config['draft'] = true }
79
74
  opts.on('--directory=DIR', 'Compile all chapters in DIR.') do |path|
80
75
  mode = :dir
81
76
  basedir = path
82
77
  end
83
- opts.on('--output-file=FILENAME', 'Write all results into file instead of stdout.') do |filename|
84
- output_filename = filename
85
- end
86
- opts.on('--tabwidth=WIDTH', 'tab width') {|width| config["tabwidth"] = width.to_i }
87
- opts.on('--catalogfile=FILENAME', 'Set catalog file') do |catalogfile|
88
- config["catalogfile"] = catalogfile
89
- end
78
+ opts.on('--output-file=FILENAME', 'Write all results into file instead of stdout.') { |filename| output_filename = filename }
79
+ opts.on('--tabwidth=WIDTH', 'tab width') { |width| config['tabwidth'] = width.to_i }
80
+ opts.on('--catalogfile=FILENAME', 'Set catalog file') { |catalogfile| config['catalogfile'] = catalogfile }
90
81
  opts.on('--help', 'Prints this message and quit.') do
91
82
  puts opts.help
92
83
  exit 0
93
84
  end
94
85
  begin
95
86
  opts.parse!
87
+
96
88
  unless target
97
89
  if check_only
98
90
  target = 'html'
99
91
  else
100
- raise OptionParser::ParseError, "no target given"
92
+ raise OptionParser::ParseError, 'no target given'
101
93
  end
102
94
  end
103
95
  rescue OptionParser::ParseError => err
104
- error err.message
96
+ @logger.error(err.message)
105
97
  $stderr.puts opts.help
106
98
  exit 1
107
99
  end
108
100
 
109
101
  begin
110
102
  loader = ReVIEW::YAMLLoader.new
111
- if config["yaml"]
112
- config.deep_merge!(loader.load_file(config["yaml"]))
113
- else
114
- if File.exist?(DEFAULT_CONFIG_FILENAME)
115
- config.deep_merge!(loader.load_file(DEFAULT_CONFIG_FILENAME))
116
- end
103
+ if config['yaml']
104
+ config.deep_merge!(loader.load_file(config['yaml']))
105
+ elsif File.exist?(DEFAULT_CONFIG_FILENAME)
106
+ config.deep_merge!(loader.load_file(DEFAULT_CONFIG_FILENAME))
117
107
  end
118
108
 
119
- config["builder"] = target
120
- ReVIEW::I18n.setup(config["language"])
109
+ config['builder'] = target
110
+ ReVIEW::I18n.setup(config['language'])
121
111
  begin
122
112
  config.check_version(ReVIEW::VERSION)
123
113
  rescue ReVIEW::ConfigError => e
124
- warn e.message
114
+ @logger.warn e.message
125
115
  end
126
116
 
127
- if ARGV.blank?
128
- mode = :dir
129
- end
117
+ mode = :dir if ARGV.blank?
130
118
 
131
119
  case mode
132
120
  when :files
133
121
  if ARGV.empty?
134
- error 'no input'
122
+ @logger.error('no input')
135
123
  exit 1
136
124
  end
137
125
 
@@ -167,24 +155,18 @@ def _main
167
155
  end
168
156
  rescue ReVIEW::ApplicationError => err
169
157
  raise if $DEBUG
170
- error err.message
158
+ @logger.error(err.message)
171
159
  exit 1
172
160
  end
173
161
  end
174
162
 
175
- def error(msg)
176
- $stderr.puts "#{File.basename($0, '.*')}: error: #{msg}"
177
- end
178
-
179
163
  def load_strategy_class(target, strict)
180
164
  require "review/#{target}builder"
181
165
  ReVIEW.const_get("#{target.upcase}Builder").new(strict)
182
166
  end
183
167
 
184
168
  def write(path, str)
185
- File.open(path, 'w') {|f|
186
- f.puts str
187
- }
169
+ File.open(path, 'w') { |f| f.puts str }
188
170
  end
189
171
 
190
172
  main
@@ -1,6 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
- # encoding: utf-8
3
-
4
2
  # Copyright (c) 2010-2017 Kenshi Muto and Masayoshi Takahashi
5
3
  #
6
4
  # This program is free software.
@@ -15,11 +13,13 @@ $LOAD_PATH.unshift((bindir + '../lib').realpath)
15
13
  require 'review/epubmaker'
16
14
  require 'review/version'
17
15
 
16
+ @logger = ReVIEW.logger
17
+
18
18
  rv = ReVIEW::EPUBMaker.new
19
19
 
20
20
  opts = OptionParser.new
21
21
  opts.version = ReVIEW::VERSION
22
- opts.banner = "Usage: #{File.basename($0)} [options] YAML_filename [export_filename]"
22
+ opts.banner = "Usage: #{File.basename($PROGRAM_NAME)} [options] YAML_filename [export_filename]"
23
23
  opts.on('--help', 'Prints this message and quit.') do
24
24
  puts opts.help
25
25
  exit 0
@@ -28,12 +28,11 @@ end
28
28
  begin
29
29
  opts.parse!
30
30
  rescue OptionParser::ParseError => err
31
- $stderr.puts err.message
31
+ @logger.error err.message
32
32
  $stderr.puts opts.help
33
33
  exit 1
34
34
  end
35
35
 
36
-
37
36
  if ARGV.size < 1 || !File.exist?(ARGV[0])
38
37
  puts opts.help
39
38
  exit 1
@@ -1,8 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
  #
3
- #
4
- # Copyright (c) 1999-2007 Minero Aoki
5
- # 2008-2014 Minero Aoki, Kenshi Muto
3
+ # Copyright (c) 2008-2017 Minero Aoki, Kenshi Muto
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
@@ -22,6 +21,7 @@ require 'review/version'
22
21
  require 'optparse'
23
22
 
24
23
  def main
24
+ @logger = ReVIEW.logger
25
25
  Signal.trap(:INT) { exit 1 }
26
26
  if RUBY_PLATFORM !~ /mswin(?!ce)|mingw|cygwin|bccwin/
27
27
  Signal.trap(:PIPE, 'IGNORE')
@@ -40,48 +40,40 @@ def _main
40
40
 
41
41
  opts = OptionParser.new
42
42
  opts.version = ReVIEW::VERSION
43
- opts.on('-a', '--all', 'print all chapters.') {
44
- source = book
45
- }
46
- opts.on('-p', '--part N', 'list only part N.') {|n|
43
+ opts.on('-a', '--all', 'print all chapters.') { source = book }
44
+ opts.on('-p', '--part N', 'list only part N.') do |n|
47
45
  source = book.part(Integer(n)) or
48
- error_exit "part #{n} does not exist in this book"
49
- }
50
- opts.on('-c', '--chapter C', 'list only chapter C.') {|c|
46
+ error_exit "part #{n} does not exist in this book"
47
+ end
48
+ opts.on('-c', '--chapter C', 'list only chapter C.') do |c|
51
49
  begin
52
50
  source = ReVIEW::Book::Part.new(nil, 1, [book.chapter(c)])
53
51
  rescue
54
52
  error_exit "chapter #{c} does not exist in this book"
55
53
  end
56
- }
57
- opts.on('-l', '--level N', 'list upto N level (1..4, default=4)') {|n|
54
+ end
55
+ opts.on('-l', '--level N', 'list upto N level (1..4, default=4)') do |n|
58
56
  upper = Integer(n)
59
- unless (0..4).include?(upper) # 0 is hidden option
60
- $stderr.puts "-l/--level option accepts only 1..4"
57
+ unless (0..4).cover?(upper) # 0 is hidden option
58
+ $stderr.puts '-l/--level option accepts only 1..4'
61
59
  exit 1
62
60
  end
63
- }
64
- opts.on('--text', 'output in plain text (default)') {
65
- printer_class = ReVIEW::TextTOCPrinter
66
- }
67
- opts.on('--html', 'output in HTML (deprecated)') {
68
- printer_class = ReVIEW::HTMLTOCPrinter
69
- }
70
- opts.on('--help', 'print this message and quit.') {
61
+ end
62
+ opts.on('--text', 'output in plain text (default)') { printer_class = ReVIEW::TextTOCPrinter }
63
+ opts.on('--html', 'output in HTML (deprecated)') { printer_class = ReVIEW::HTMLTOCPrinter }
64
+ opts.on('--help', 'print this message and quit.') do
71
65
  puts opts.help
72
66
  exit 0
73
- }
67
+ end
74
68
  begin
75
69
  opts.parse!
76
70
  rescue OptionParser::ParseError => err
77
- $stderr.puts err.message
71
+ @logger.error err.message
78
72
  $stderr.puts opts.help
79
73
  exit 1
80
74
  end
81
75
  if source
82
- unless ARGV.empty?
83
- error_exit '-a/-s option and file arguments are exclusive'
84
- end
76
+ error_exit '-a/-s option and file arguments are exclusive' unless ARGV.empty?
85
77
  else
86
78
  puts opts.help
87
79
  exit 0
@@ -89,7 +81,7 @@ def _main
89
81
 
90
82
  begin
91
83
  printer = printer_class.new(upper, param)
92
- if source.kind_of?(ReVIEW::Book::Part)
84
+ if source.is_a?(ReVIEW::Book::Part)
93
85
  printer.print_part source
94
86
  else
95
87
  printer.print_book source
@@ -101,7 +93,7 @@ def _main
101
93
  end
102
94
 
103
95
  def error_exit(msg)
104
- $stderr.puts "#{File.basename($0)}: #{msg}"
96
+ @logger.error "#{File.basename($PROGRAM_NAME)}: #{msg}"
105
97
  exit 1
106
98
  end
107
99
 
@@ -15,29 +15,24 @@ require 'pathname'
15
15
  bindir = Pathname.new(__FILE__).realpath.dirname
16
16
  $LOAD_PATH.unshift((bindir + '../lib').realpath)
17
17
 
18
- require 'review/version'
18
+ require 'review'
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)} [option] dirname"
24
+ opts.banner = "Usage: #{File.basename($PROGRAM_NAME)} [option] dirname"
24
25
  opts.on('-h', '--help', 'print this message and quit.') do
25
26
  puts opts.help
26
27
  exit 0
27
28
  end
28
- opts.on('-f', '--force', 'generate files (except *.re) if directory has already existed.') do
29
- @force = true
30
- end
31
- opts.on('-l', '--locale', 'generate locale.yml file.') do
32
- @locale = true
33
- end
34
- opts.on('', '--epub-version VERSION', 'define EPUB version') do |version|
35
- @epub_version = version
36
- end
29
+ opts.on('-f', '--force', 'generate files (except *.re) if directory has already existed.') { @force = true }
30
+ opts.on('-l', '--locale', 'generate locale.yml file.') { @locale = true }
31
+ opts.on('', '--epub-version VERSION', 'define EPUB version') { |version| @epub_version = version }
37
32
  begin
38
33
  opts.parse!
39
34
  rescue OptionParser::ParseError => err
40
- $stderr.puts err.message
35
+ @logger.error err.message
41
36
  $stderr.puts opts.help
42
37
  exit 1
43
38
  end
@@ -48,7 +43,7 @@ def main
48
43
  end
49
44
 
50
45
  initdir = File.expand_path(ARGV.shift)
51
- @review_dir = File.dirname(File.expand_path(__FILE__ + "./../"))
46
+ @review_dir = File.dirname(File.expand_path(__FILE__ + './../'))
52
47
 
53
48
  generate_dir(initdir) do |dir|
54
49
  generate_catalog_file(dir)
@@ -67,7 +62,7 @@ end
67
62
 
68
63
  def generate_dir(dir)
69
64
  if File.exist?(dir) && !@force
70
- puts "#{dir} already exists."
65
+ @logger.error "#{dir} already exists."
71
66
  exit
72
67
  end
73
68
  FileUtils.mkdir_p dir
@@ -75,11 +70,7 @@ def generate_dir(dir)
75
70
  end
76
71
 
77
72
  def generate_sample(dir)
78
- if !@force
79
- File.open("#{dir}/#{File.basename(dir)}.re", "w") do |file|
80
- file.write("= ")
81
- end
82
- end
73
+ File.open("#{dir}/#{File.basename(dir)}.re", 'w') { |file| file.write('= ') } unless @force
83
74
  end
84
75
 
85
76
  def generate_layout(dir)
@@ -87,7 +78,7 @@ def generate_layout(dir)
87
78
  end
88
79
 
89
80
  def generate_catalog_file(dir)
90
- File.open(dir + "/catalog.yml", "w") do |file|
81
+ File.open(dir + '/catalog.yml', 'w') do |file|
91
82
  file.write <<-EOS
92
83
  PREDEF:
93
84
 
@@ -107,39 +98,39 @@ def generate_images_dir(dir)
107
98
  end
108
99
 
109
100
  def generate_cover_image(dir)
110
- FileUtils.cp @review_dir + "/test/sample-book/src/images/cover.jpg", dir + '/images/'
101
+ FileUtils.cp @review_dir + '/test/sample-book/src/images/cover.jpg', dir + '/images/'
111
102
  end
112
103
 
113
104
  def generate_config(dir)
114
- today = Time.now.strftime("%Y-%m-%d")
115
- content = File.read(@review_dir + "/doc/config.yml.sample", {:encoding => 'utf-8'})
105
+ today = Time.now.strftime('%Y-%m-%d')
106
+ content = File.read(@review_dir + '/doc/config.yml.sample', encoding: 'utf-8')
116
107
  content.gsub!(/^#\s*coverimage:.*$/, 'coverimage: cover.jpg')
117
108
  content.gsub!(/^#\s*date:.*$/, "date: #{today}")
118
- content.gsub!(/^#\s*history:.*$/, %Q|history: [["#{today}"]]|)
119
- content.gsub!(/^#\s*texstyle:.*$/, "texstyle: reviewmacro")
120
- content.gsub!(/^(#\s*)?stylesheet:.*$/, %Q|stylesheet: ["style.css"]|)
109
+ content.gsub!(/^#\s*history:.*$/, %Q(history: [["#{today}"]]))
110
+ content.gsub!(/^#\s*texstyle:.*$/, 'texstyle: reviewmacro')
111
+ content.gsub!(/^(#\s*)?stylesheet:.*$/, %Q(stylesheet: ["style.css"]))
121
112
  if @epub_version.to_i == 2
122
- content.gsub!(/^#.*epubversion:.*$/,'epubversion: 2')
123
- content.gsub!(/^#.*htmlversion:.*$/,'htmlversion: 4')
113
+ content.gsub!(/^#.*epubversion:.*$/, 'epubversion: 2')
114
+ content.gsub!(/^#.*htmlversion:.*$/, 'htmlversion: 4')
124
115
  end
125
- File.open(File.join(dir, "config.yml"), "w"){|f| f.write(content) }
116
+ File.open(File.join(dir, 'config.yml'), 'w') { |f| f.write(content) }
126
117
  end
127
118
 
128
119
  def generate_style(dir)
129
- FileUtils.cp @review_dir + "/test/sample-book/src/style.css", dir
120
+ FileUtils.cp @review_dir + '/test/sample-book/src/style.css', dir
130
121
  end
131
122
 
132
123
  def generate_texmacro(dir)
133
124
  texmacrodir = dir + '/sty'
134
125
  FileUtils.mkdir_p texmacrodir
135
126
  FileUtils.cp [
136
- @review_dir + "/test/sample-book/src/sty/reviewmacro.sty",
137
- @review_dir + "/test/sample-book/src/sty/jumoline.sty"
127
+ @review_dir + '/test/sample-book/src/sty/reviewmacro.sty',
128
+ @review_dir + '/test/sample-book/src/sty/jumoline.sty'
138
129
  ], texmacrodir
139
130
  end
140
131
 
141
132
  def generate_rakefile(dir)
142
- FileUtils.cp @review_dir + "/test/sample-book/src/Rakefile", dir
133
+ FileUtils.cp @review_dir + '/test/sample-book/src/Rakefile', dir
143
134
  end
144
135
 
145
136
  def generate_locale(dir)
@@ -147,7 +138,7 @@ def generate_locale(dir)
147
138
  end
148
139
 
149
140
  def generate_gemfile(dir)
150
- File.open(dir + "/Gemfile", "w") do |file|
141
+ File.open(dir + '/Gemfile', 'w') do |file|
151
142
  file.write <<-EOS
152
143
  source 'https://rubygems.org'
153
144
 
@@ -157,6 +148,4 @@ EOS
157
148
  end
158
149
  end
159
150
 
160
- if File.basename($0) == File.basename(__FILE__)
161
- main()
162
- end
151
+ main if File.basename($PROGRAM_NAME) == File.basename(__FILE__)