review 2.3.0 → 2.4.0

Sign up to get free protection for your applications and to get access to all the features.
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__)