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,7 +1,5 @@
1
- # encoding: utf-8
2
-
3
- # Copyright (c) 2002-2006 Minero Aoki
4
- # 2008-2017 Minero Aoki, Kenshi Muto
1
+ # Copyright (c) 2008-2017 Minero Aoki, Kenshi Muto
2
+ # 2002-2006 Minero Aoki
5
3
  #
6
4
  # This program is free software.
7
5
  # You can distribute or modify this program under the terms of
@@ -12,14 +10,10 @@ require 'review/builder'
12
10
  require 'review/textutils'
13
11
 
14
12
  module ReVIEW
15
-
16
13
  class TOPBuilder < Builder
17
-
18
14
  include TextUtils
19
15
 
20
- [:ttbold, :hint, :maru, :keytop, :labelref, :ref, :pageref, :balloon, :strong].each {|e|
21
- Compiler.definline(e)
22
- }
16
+ %i[ttbold hint maru keytop labelref ref balloon strong].each { |e| Compiler.definline(e) }
23
17
  Compiler.defsingle(:dtp, 1)
24
18
 
25
19
  Compiler.defblock(:insn, 1)
@@ -55,47 +49,47 @@ module ReVIEW
55
49
  @sec_counter = SecCounter.new(5, @chapter)
56
50
 
57
51
  @titles = {
58
- "emlist" => "インラインリスト",
59
- "cmd" => "コマンド",
60
- "quote" => "引用",
61
- "centering" => "中央揃え",
62
- "flushright" => "右寄せ",
63
- "note" => "ノート",
64
- "memo" => "メモ",
65
- "important" => "重要",
66
- "info" => "情報",
67
- "planning" => "プランニング",
68
- "shoot" => "トラブルシュート",
69
- "term" => "用語解説",
70
- "notice" => "注意",
71
- "caution" => "警告",
72
- "warning" => "危険",
73
- "point" => "ここがポイント",
74
- "reference" => "参考",
75
- "link" => "リンク",
76
- "best" => "ベストプラクティス",
77
- "practice" => "練習問題",
78
- "security" => "セキュリティ",
79
- "expert" => "エキスパートに訊け",
80
- "tip" => "TIP",
81
- "box" => "書式",
82
- "insn" => "書式",
83
- "column" => "コラム",
84
- "xcolumn" => "コラムパターン2",
85
- "world" => "Worldコラム",
86
- "hood" => "Under The Hoodコラム",
87
- "edition" => "Editionコラム",
88
- "insideout" => "InSideOutコラム",
89
- "ref" => "参照",
90
- "sup" => "補足",
91
- "read" => "リード",
92
- "lead" => "リード",
93
- "list" => "リスト",
94
- "image" => "",
95
- "texequation" => "TeX式",
96
- "table" => "",
97
- "bpo" => "bpo",
98
- "source" => "ソースコードリスト",
52
+ 'emlist' => 'インラインリスト',
53
+ 'cmd' => 'コマンド',
54
+ 'quote' => '引用',
55
+ 'centering' => '中央揃え',
56
+ 'flushright' => '右寄せ',
57
+ 'note' => 'ノート',
58
+ 'memo' => 'メモ',
59
+ 'important' => '重要',
60
+ 'info' => '情報',
61
+ 'planning' => 'プランニング',
62
+ 'shoot' => 'トラブルシュート',
63
+ 'term' => '用語解説',
64
+ 'notice' => '注意',
65
+ 'caution' => '警告',
66
+ 'warning' => '危険',
67
+ 'point' => 'ここがポイント',
68
+ 'reference' => '参考',
69
+ 'link' => 'リンク',
70
+ 'best' => 'ベストプラクティス',
71
+ 'practice' => '練習問題',
72
+ 'security' => 'セキュリティ',
73
+ 'expert' => 'エキスパートに訊け',
74
+ 'tip' => 'TIP',
75
+ 'box' => '書式',
76
+ 'insn' => '書式',
77
+ 'column' => 'コラム',
78
+ 'xcolumn' => 'コラムパターン2',
79
+ 'world' => 'Worldコラム',
80
+ 'hood' => 'Under The Hoodコラム',
81
+ 'edition' => 'Editionコラム',
82
+ 'insideout' => 'InSideOutコラム',
83
+ 'ref' => '参照',
84
+ 'sup' => '補足',
85
+ 'read' => 'リード',
86
+ 'lead' => 'リード',
87
+ 'list' => 'リスト',
88
+ 'image' => '',
89
+ 'texequation' => 'TeX式',
90
+ 'table' => '',
91
+ 'bpo' => 'bpo',
92
+ 'source' => 'ソースコードリスト'
99
93
  }
100
94
  end
101
95
  private :builder_init_file
@@ -122,17 +116,9 @@ module ReVIEW
122
116
  @output.string
123
117
  end
124
118
 
125
- def warn(msg)
126
- $stderr.puts "#{@location.filename}:#{@location.lineno}: warning: #{msg}"
127
- end
128
-
129
- def error(msg)
130
- $stderr.puts "#{@location.filename}:#{@location.lineno}: error: #{msg}"
131
- end
132
-
133
- def headline(level, label, caption)
134
- prefix, anchor = headline_prefix(level)
135
- puts %Q[■H#{level}■#{prefix}#{compile_inline(caption)}]
119
+ def headline(level, _label, caption)
120
+ prefix, _anchor = headline_prefix(level)
121
+ puts %Q(■H#{level}■#{prefix}#{compile_inline(caption)})
136
122
  end
137
123
 
138
124
  def ul_begin
@@ -170,9 +156,7 @@ module ReVIEW
170
156
  end
171
157
 
172
158
  def dd(lines)
173
- split_paragraph(lines).each do |paragraph|
174
- puts "\t#{paragraph.gsub(/\n/, '')}"
175
- end
159
+ split_paragraph(lines).each { |paragraph| puts "\t#{paragraph.gsub(/\n/, '')}" }
176
160
  end
177
161
 
178
162
  def dl_end
@@ -184,9 +168,9 @@ module ReVIEW
184
168
  end
185
169
 
186
170
  def read(lines)
187
- puts "◆→開始:#{@titles["lead"]}←◆"
171
+ puts "◆→開始:#{@titles['lead']}←◆"
188
172
  puts split_paragraph(lines).join("\n")
189
- puts "◆→終了:#{@titles["lead"]}←◆"
173
+ puts "◆→終了:#{@titles['lead']}←◆"
190
174
  blank
191
175
  end
192
176
 
@@ -194,36 +178,34 @@ module ReVIEW
194
178
 
195
179
  def inline_list(id)
196
180
  chapter, id = extract_chapter_id(id)
197
- if get_chap(chapter).nil?
198
- %Q[#{I18n.t("list")}#{I18n.t("format_number_without_chapter", [chapter.list(id).number])}]
181
+ if get_chap(chapter)
182
+ %Q(#{I18n.t('list')}#{I18n.t('format_number', [get_chap(chapter), chapter.list(id).number])})
199
183
  else
200
- %Q[#{I18n.t("list")}#{I18n.t("format_number", [get_chap(chapter), chapter.list(id).number])}]
184
+ %Q(#{I18n.t('list')}#{I18n.t('format_number_without_chapter', [chapter.list(id).number])})
201
185
  end
202
186
  end
203
187
 
204
- def list_header(id, caption, lang)
188
+ def list_header(id, caption, _lang)
205
189
  blank
206
- puts "◆→開始:#{@titles["list"]}←◆"
207
- if get_chap.nil?
208
- puts %Q[#{I18n.t("list")}#{I18n.t("format_number_without_chapter", [@chapter.list(id).number])}#{I18n.t("caption_prefix_idgxml")}#{compile_inline(caption)}]
190
+ puts "◆→開始:#{@titles['list']}←◆"
191
+ if get_chap
192
+ puts %Q(#{I18n.t('list')}#{I18n.t('format_number', [get_chap, @chapter.list(id).number])}#{I18n.t('caption_prefix_idgxml')}#{compile_inline(caption)})
209
193
  else
210
- puts %Q[#{I18n.t("list")}#{I18n.t("format_number", [get_chap, @chapter.list(id).number])}#{I18n.t("caption_prefix_idgxml")}#{compile_inline(caption)}]
194
+ puts %Q(#{I18n.t('list')}#{I18n.t('format_number_without_chapter', [@chapter.list(id).number])}#{I18n.t('caption_prefix_idgxml')}#{compile_inline(caption)})
211
195
  end
212
196
  blank
213
197
  end
214
198
 
215
- def list_body(id, lines, lang)
216
- lines.each do |line|
217
- puts detab(line)
218
- end
219
- puts "◆→終了:#{@titles["list"]}←◆"
199
+ def list_body(_id, lines, _lang)
200
+ lines.each { |line| puts detab(line) }
201
+ puts "◆→終了:#{@titles['list']}←◆"
220
202
  blank
221
203
  end
222
204
 
223
205
  def base_block(type, lines, caption = nil)
224
206
  blank
225
207
  puts "◆→開始:#{@titles[type]}←◆"
226
- puts "■#{compile_inline(caption)}" unless caption.nil?
208
+ puts "■#{compile_inline(caption)}" if caption.present?
227
209
  puts lines.join("\n")
228
210
  puts "◆→終了:#{@titles[type]}←◆"
229
211
  blank
@@ -232,124 +214,124 @@ module ReVIEW
232
214
  def base_parablock(type, lines, caption = nil)
233
215
  blank
234
216
  puts "◆→開始:#{@titles[type]}←◆"
235
- puts "■#{compile_inline(caption)}" unless caption.nil?
217
+ puts "■#{compile_inline(caption)}" if caption.present?
236
218
  puts split_paragraph(lines).join("\n")
237
219
  puts "◆→終了:#{@titles[type]}←◆"
238
220
  blank
239
221
  end
240
222
 
241
- def emlist(lines, caption = nil, lang = nil)
242
- base_block "emlist", lines, caption
223
+ def emlist(lines, caption = nil, _lang = nil)
224
+ base_block 'emlist', lines, caption
243
225
  end
244
226
 
245
- def emlistnum(lines, caption = nil, lang = nil)
227
+ def emlistnum(lines, caption = nil, _lang = nil)
246
228
  blank
247
- puts "◆→開始:#{@titles["emlist"]}←◆"
248
- puts "■#{compile_inline(caption)}" unless caption.nil?
249
- _lines = []
250
- lines.each_with_index do |line, i|
251
- puts (i + 1).to_s.rjust(2) + ": #{line}"
252
- end
253
- puts "◆→終了:#{@titles["emlist"]}←◆"
229
+ puts "◆→開始:#{@titles['emlist']}←◆"
230
+ puts "■#{compile_inline(caption)}" if caption.present?
231
+ lines.each_with_index { |line, i| puts((i + 1).to_s.rjust(2) + ": #{line}") }
232
+ puts "◆→終了:#{@titles['emlist']}←◆"
254
233
  blank
255
234
  end
256
235
 
257
- def listnum_body(lines, lang)
258
- lines.each_with_index do |line, i|
259
- puts (i + 1).to_s.rjust(2) + ": #{line}"
260
- end
261
- puts "◆→終了:#{@titles["list"]}←◆"
236
+ def listnum_body(lines, _lang)
237
+ lines.each_with_index { |line, i| puts((i + 1).to_s.rjust(2) + ": #{line}") }
238
+ puts "◆→終了:#{@titles['list']}←◆"
262
239
  blank
263
240
  end
264
241
 
265
242
  def cmd(lines, caption = nil)
266
- base_block "cmd", lines, caption
243
+ base_block 'cmd', lines, caption
267
244
  end
268
245
 
269
246
  def quote(lines)
270
- base_parablock "quote", lines, nil
247
+ base_parablock 'quote', lines, nil
271
248
  end
272
249
 
273
250
  def inline_table(id)
274
251
  chapter, id = extract_chapter_id(id)
275
- if get_chap(chapter).nil?
276
- "#{I18n.t("table")}#{I18n.t("format_number_without_chapter", [chapter.table(id).number])}"
252
+ if get_chap(chapter)
253
+ "#{I18n.t('table')}#{I18n.t('format_number', [get_chap(chapter), chapter.table(id).number])}"
277
254
  else
278
- "#{I18n.t("table")}#{I18n.t("format_number", [get_chap(chapter), chapter.table(id).number])}"
255
+ "#{I18n.t('table')}#{I18n.t('format_number_without_chapter', [chapter.table(id).number])}"
279
256
  end
280
257
  end
281
258
 
282
259
  def inline_img(id)
283
260
  chapter, id = extract_chapter_id(id)
284
- if get_chap(chapter).nil?
285
- "#{I18n.t("image")}#{I18n.t("format_number_without_chapter", [chapter.image(id).number])}"
261
+ if get_chap(chapter)
262
+ "#{I18n.t('image')}#{I18n.t('format_number', [get_chap(chapter), chapter.image(id).number])}"
286
263
  else
287
- "#{I18n.t("image")}#{I18n.t("format_number", [get_chap(chapter), chapter.image(id).number])}"
264
+ "#{I18n.t('image')}#{I18n.t('format_number_without_chapter', [chapter.image(id).number])}"
288
265
  end
289
266
  end
290
267
 
291
- def image(lines, id, caption, metric=nil)
268
+ def handle_metric(str)
269
+ str
270
+ end
271
+
272
+ def result_metric(array)
273
+ array.join(',')
274
+ end
275
+
276
+ def image(lines, id, caption, metric = nil)
277
+ metrics = parse_metric('top', metric)
278
+ metrics = " #{metrics}" if metrics.present?
292
279
  blank
293
- puts "◆→開始:#{@titles["image"]}←◆"
294
- if get_chap.nil?
295
- puts "#{I18n.t("image")}#{I18n.t("format_number_without_chapter", [@chapter.image(id).number])}#{I18n.t("caption_prefix_idgxml")}#{compile_inline(caption)}"
280
+ puts "◆→開始:#{@titles['image']}←◆"
281
+ if get_chap
282
+ puts "#{I18n.t('image')}#{I18n.t('format_number', [get_chap, @chapter.image(id).number])}#{I18n.t('caption_prefix_idgxml')}#{compile_inline(caption)}"
296
283
  else
297
- puts "#{I18n.t("image")}#{I18n.t("format_number", [get_chap, @chapter.image(id).number])}#{I18n.t("caption_prefix_idgxml")}#{compile_inline(caption)}"
284
+ puts "#{I18n.t('image')}#{I18n.t('format_number_without_chapter', [@chapter.image(id).number])}#{I18n.t('caption_prefix_idgxml')}#{compile_inline(caption)}"
298
285
  end
299
286
  blank
300
287
  if @chapter.image(id).bound?
301
- puts "◆→#{@chapter.image(id).path}←◆"
288
+ puts "◆→#{@chapter.image(id).path}#{metrics}←◆"
302
289
  else
303
- lines.each do |line|
304
- puts line
305
- end
290
+ warn "image not bound: #{id}"
291
+ lines.each { |line| puts line }
306
292
  end
307
- puts "◆→終了:#{@titles["image"]}←◆"
293
+ puts "◆→終了:#{@titles['image']}←◆"
308
294
  blank
309
295
  end
310
296
 
311
297
  def texequation(lines)
312
- puts "◆→開始:#{@titles["texequation"]}←◆"
313
- puts "#{lines.join("\n")}"
314
- puts "◆→終了:#{@titles["texequation"]}←◆"
298
+ puts "◆→開始:#{@titles['texequation']}←◆"
299
+ puts lines.join("\n")
300
+ puts "◆→終了:#{@titles['texequation']}←◆"
315
301
  blank
316
302
  end
317
303
 
318
304
  def table(lines, id = nil, caption = nil)
319
305
  blank
320
- puts "◆→開始:#{@titles["table"]}←◆"
306
+ puts "◆→開始:#{@titles['table']}←◆"
321
307
 
322
308
  rows = []
323
309
  sepidx = nil
324
310
  lines.each_with_index do |line, idx|
325
311
  if /\A[\=\-]{12}/ =~ line
326
312
  # just ignore
327
- #error "too many table separator" if sepidx
313
+ # error "too many table separator" if sepidx
328
314
  sepidx ||= idx
329
315
  next
330
316
  end
331
- rows.push(line.strip.split(/\t+/).map {|s| s.sub(/\A\./, '') })
317
+ rows.push(line.strip.split(/\t+/).map { |s| s.sub(/\A\./, '') })
332
318
  end
333
319
  rows = adjust_n_cols(rows)
334
320
 
335
321
  begin
336
- table_header id, caption unless caption.nil?
322
+ table_header id, caption if caption.present?
337
323
  rescue KeyError
338
324
  error "no such table: #{id}"
339
325
  end
340
326
  return if rows.empty?
341
327
  table_begin rows.first.size
342
328
  if sepidx
343
- sepidx.times do
344
- tr(rows.shift.map {|s| th(s) })
345
- end
346
- rows.each do |cols|
347
- tr(cols.map {|s| td(s) })
348
- end
329
+ sepidx.times { tr(rows.shift.map { |s| th(s) }) }
330
+ rows.each { |cols| tr(cols.map { |s| td(s) }) }
349
331
  else
350
332
  rows.each do |cols|
351
333
  h, *cs = *cols
352
- tr([th(h)] + cs.map {|s| td(s) })
334
+ tr([th(h)] + cs.map { |s| td(s) })
353
335
  end
354
336
  end
355
337
  table_end
@@ -358,12 +340,10 @@ module ReVIEW
358
340
  def table_header(id, caption)
359
341
  if id.nil?
360
342
  puts compile_inline(caption)
343
+ elsif get_chap
344
+ puts "#{I18n.t('table')}#{I18n.t('format_number', [get_chap, @chapter.table(id).number])}#{I18n.t('caption_prefix_idgxml')}#{compile_inline(caption)}"
361
345
  else
362
- if get_chap.nil?
363
- puts "#{I18n.t("table")}#{I18n.t("format_number_without_chapter", [@chapter.table(id).number])}#{I18n.t("caption_prefix_idgxml")}#{compile_inline(caption)}"
364
- else
365
- puts "#{I18n.t("table")}#{I18n.t("format_number", [get_chap, @chapter.table(id).number])}#{I18n.t("caption_prefix_idgxml")}#{compile_inline(caption)}"
366
- end
346
+ puts "#{I18n.t('table')}#{I18n.t('format_number_without_chapter', [@chapter.table(id).number])}#{I18n.t('caption_prefix_idgxml')}#{compile_inline(caption)}"
367
347
  end
368
348
  blank
369
349
  end
@@ -384,17 +364,16 @@ module ReVIEW
384
364
  end
385
365
 
386
366
  def table_end
387
- puts "◆→終了:#{@titles["table"]}←◆"
367
+ puts "◆→終了:#{@titles['table']}←◆"
388
368
  blank
389
369
  end
390
370
 
391
371
  def comment(lines, comment = nil)
392
- if @book.config["draft"]
393
- lines ||= []
394
- lines.unshift comment unless comment.blank?
395
- str = lines.join("")
396
- puts "◆→#{str}←◆"
397
- end
372
+ return unless @book.config['draft']
373
+ lines ||= []
374
+ lines.unshift comment unless comment.blank?
375
+ str = lines.join
376
+ puts "◆→#{str}←◆"
398
377
  end
399
378
 
400
379
  def footnote(id, str)
@@ -417,10 +396,10 @@ module ReVIEW
417
396
  end
418
397
 
419
398
  def compile_href(url, label)
420
- if label.nil?
421
- %Q[△#{url}☆]
399
+ if label
400
+ "#{label}(△#{url}☆)"
422
401
  else
423
- %Q[#{label}(△#{url}☆)]
402
+ "△#{url}☆"
424
403
  end
425
404
  end
426
405
 
@@ -433,7 +412,7 @@ module ReVIEW
433
412
  end
434
413
 
435
414
  def inline_raw(str)
436
- %Q[#{super(str).gsub("\\n", "\n")}]
415
+ super(str).gsub('\\n', "\n")
437
416
  end
438
417
 
439
418
  def inline_hint(str)
@@ -486,10 +465,10 @@ module ReVIEW
486
465
 
487
466
  def inline_icon(id)
488
467
  begin
489
- return "◆→画像 #{@chapter.image(id).path.sub(/\A\.\//, "")}←◆"
468
+ "◆→画像 #{@chapter.image(id).path.sub(%r{\A\./}, '')}←◆"
490
469
  rescue
491
- warn "no such icon image: #{id}"
492
- return "◆→画像 #{id}←◆"
470
+ warn "image not bound: #{id}"
471
+ "◆→画像 #{id}←◆"
493
472
  end
494
473
  end
495
474
 
@@ -506,26 +485,24 @@ module ReVIEW
506
485
  end
507
486
 
508
487
  def inline_uchar(str)
509
- [str.to_i(16)].pack("U")
488
+ [str.to_i(16)].pack('U')
510
489
  end
511
490
 
512
491
  def inline_comment(str)
513
- if @book.config["draft"]
492
+ if @book.config['draft']
514
493
  "◆→#{str}←◆"
515
494
  else
516
- ""
495
+ ''
517
496
  end
518
497
  end
519
498
 
520
499
  def inline_m(str)
521
- %Q[◆→TeX式ここから←◆#{str}◆→TeX式ここまで←◆]
500
+ %Q(◆→TeX式ここから←◆#{str}◆→TeX式ここまで←◆)
522
501
  end
523
502
 
524
503
  def bibpaper(lines, id, caption)
525
504
  bibpaper_header id, caption
526
- unless lines.empty?
527
- bibpaper_bibpaper id, caption, lines
528
- end
505
+ bibpaper_bibpaper id, caption, lines unless lines.empty?
529
506
  end
530
507
 
531
508
  def bibpaper_header(id, caption)
@@ -533,8 +510,8 @@ module ReVIEW
533
510
  puts " #{compile_inline(caption)}"
534
511
  end
535
512
 
536
- def bibpaper_bibpaper(id, caption, lines)
537
- print split_paragraph(lines).join("")
513
+ def bibpaper_bibpaper(_id, _caption, lines)
514
+ print split_paragraph(lines).join
538
515
  end
539
516
 
540
517
  def inline_bib(id)
@@ -544,25 +521,23 @@ module ReVIEW
544
521
  def inline_hd_chap(chap, id)
545
522
  if chap.number
546
523
  n = chap.headline_index.number(id)
547
- if @book.config["secnolevel"] >= n.split('.').size
548
- return I18n.t("chapter_quote", "#{n} #{compile_inline(chap.headline(id).caption)}")
549
- end
524
+ return I18n.t('chapter_quote', "#{n} #{compile_inline(chap.headline(id).caption)}") if @book.config['secnolevel'] >= n.split('.').size
550
525
  end
551
- I18n.t("chapter_quote", compile_inline(chap.headline(id).caption))
526
+ I18n.t('chapter_quote', compile_inline(chap.headline(id).caption))
552
527
  end
553
528
 
554
529
  def noindent
555
- puts "◆→DTP連絡:次の1行インデントなし←◆"
530
+ puts '◆→DTP連絡:次の1行インデントなし←◆'
556
531
  end
557
532
 
558
- def nonum_begin(level, label, caption)
533
+ def nonum_begin(level, _label, caption)
559
534
  puts "■H#{level}■#{compile_inline(caption)}"
560
535
  end
561
536
 
562
537
  def nonum_end(level)
563
538
  end
564
539
 
565
- def notoc_begin(level, label, caption)
540
+ def notoc_begin(level, _label, caption)
566
541
  puts "■H#{level}■#{compile_inline(caption)}◆→DTP連絡:目次に掲載しない←◆"
567
542
  end
568
543
 
@@ -579,170 +554,172 @@ module ReVIEW
579
554
  def common_column_begin(type, caption)
580
555
  blank
581
556
  puts "◆→開始:#{@titles[type]}←◆"
582
- puts %Q[■#{compile_inline(caption)}]
557
+ puts "■#{compile_inline(caption)}"
583
558
  end
584
559
 
585
560
  def common_column_end(type)
586
- puts %Q[◆→終了:#{@titles[type]}←◆]
561
+ puts "◆→終了:#{@titles[type]}←◆"
587
562
  blank
588
563
  end
589
564
 
590
- def column_begin(level, label, caption)
591
- common_column_begin("column", caption)
565
+ def column_begin(_level, _label, caption)
566
+ common_column_begin('column', caption)
592
567
  end
593
568
 
594
- def column_end(level)
595
- common_column_end("column")
569
+ def column_end(_level)
570
+ common_column_end('column')
596
571
  end
597
572
 
598
- def xcolumn_begin(level, label, caption)
599
- common_column_begin("xcolumn", caption)
573
+ def xcolumn_begin(_level, _label, caption)
574
+ common_column_begin('xcolumn', caption)
600
575
  end
601
576
 
602
- def xcolumn_end(level)
603
- common_column_end("xcolumn")
577
+ def xcolumn_end(_level)
578
+ common_column_end('xcolumn')
604
579
  end
605
580
 
606
- def world_begin(level, label, caption)
607
- common_column_begin("world", caption)
581
+ def world_begin(_level, _label, caption)
582
+ common_column_begin('world', caption)
608
583
  end
609
584
 
610
- def world_end(level)
611
- common_column_end("world")
585
+ def world_end(_level)
586
+ common_column_end('world')
612
587
  end
613
588
 
614
- def hood_begin(level, label, caption)
615
- common_column_begin("hood", caption)
589
+ def hood_begin(_level, _label, caption)
590
+ common_column_begin('hood', caption)
616
591
  end
617
592
 
618
- def hood_end(level)
619
- common_column_end("hood")
593
+ def hood_end(_level)
594
+ common_column_end('hood')
620
595
  end
621
596
 
622
- def edition_begin(level, label, caption)
623
- common_column_begin("edition", caption)
597
+ def edition_begin(_level, _label, caption)
598
+ common_column_begin('edition', caption)
624
599
  end
625
600
 
626
- def edition_end(level)
627
- common_column_end("edition")
601
+ def edition_end(_level)
602
+ common_column_end('edition')
628
603
  end
629
604
 
630
- def insideout_begin(level, label, caption)
631
- common_column_begin("insideout", caption)
605
+ def insideout_begin(_level, _label, caption)
606
+ common_column_begin('insideout', caption)
632
607
  end
633
608
 
634
- def insideout_end(level)
635
- common_column_end("insideout")
609
+ def insideout_end(_level)
610
+ common_column_end('insideout')
636
611
  end
637
612
 
638
- def ref_begin(level, label, caption)
639
- common_column_begin("ref", caption)
613
+ def ref_begin(_level, _label, caption)
614
+ common_column_begin('ref', caption)
640
615
  end
641
616
 
642
- def ref_end(level)
643
- common_column_end("ref")
617
+ def ref_end(_level)
618
+ common_column_end('ref')
644
619
  end
645
620
 
646
- def sup_begin(level, label, caption)
647
- common_column_begin("sup", caption)
621
+ def sup_begin(_level, _label, caption)
622
+ common_column_begin('sup', caption)
648
623
  end
649
624
 
650
- def sup_end(level)
651
- common_column_end("sup")
625
+ def sup_end(_level)
626
+ common_column_end('sup')
652
627
  end
653
628
 
654
629
  def flushright(lines)
655
- base_parablock "flushright", lines, nil
630
+ base_parablock 'flushright', lines, nil
656
631
  end
657
632
 
658
633
  def centering(lines)
659
- base_parablock "centering", lines, nil
634
+ base_parablock 'centering', lines, nil
660
635
  end
661
636
 
662
637
  def note(lines, caption = nil)
663
- base_parablock "note", lines, caption
638
+ base_parablock 'note', lines, caption
664
639
  end
665
640
 
666
641
  def memo(lines, caption = nil)
667
- base_parablock "memo", lines, caption
642
+ base_parablock 'memo', lines, caption
668
643
  end
669
644
 
670
645
  def tip(lines, caption = nil)
671
- base_parablock "tip", lines, caption
646
+ base_parablock 'tip', lines, caption
672
647
  end
673
648
 
674
649
  def info(lines, caption = nil)
675
- base_parablock "info", lines, caption
650
+ base_parablock 'info', lines, caption
676
651
  end
677
652
 
678
653
  def planning(lines, caption = nil)
679
- base_parablock "planning", lines, caption
654
+ base_parablock 'planning', lines, caption
680
655
  end
681
656
 
682
657
  def best(lines, caption = nil)
683
- base_parablock "best", lines, caption
658
+ base_parablock 'best', lines, caption
684
659
  end
685
660
 
686
661
  def important(lines, caption = nil)
687
- base_parablock "important", lines, caption
662
+ base_parablock 'important', lines, caption
688
663
  end
689
664
 
690
665
  def security(lines, caption = nil)
691
- base_parablock "security", lines, caption
666
+ base_parablock 'security', lines, caption
692
667
  end
693
668
 
694
669
  def caution(lines, caption = nil)
695
- base_parablock "caution", lines, caption
670
+ base_parablock 'caution', lines, caption
696
671
  end
697
672
 
698
673
  def term(lines)
699
- base_parablock "term", lines, nil
674
+ base_parablock 'term', lines, nil
700
675
  end
701
676
 
702
677
  def link(lines, caption = nil)
703
- base_parablock "link", lines, caption
678
+ base_parablock 'link', lines, caption
704
679
  end
705
680
 
706
681
  def notice(lines, caption = nil)
707
- base_parablock "notice", lines, caption
682
+ base_parablock 'notice', lines, caption
708
683
  end
709
684
 
710
685
  def point(lines, caption = nil)
711
- base_parablock "point", lines, caption
686
+ base_parablock 'point', lines, caption
712
687
  end
713
688
 
714
689
  def shoot(lines, caption = nil)
715
- base_parablock "shoot", lines, caption
690
+ base_parablock 'shoot', lines, caption
716
691
  end
717
692
 
718
693
  def reference(lines)
719
- base_parablock "reference", lines, nil
694
+ base_parablock 'reference', lines, nil
720
695
  end
721
696
 
722
697
  def practice(lines)
723
- base_parablock "practice", lines, nil
698
+ base_parablock 'practice', lines, nil
724
699
  end
725
700
 
726
701
  def expert(lines)
727
- base_parablock "expert", lines, nil
702
+ base_parablock 'expert', lines, nil
728
703
  end
729
704
 
730
705
  def insn(lines, caption = nil)
731
- base_block "insn", lines, caption
706
+ base_block 'insn', lines, caption
732
707
  end
733
708
 
734
709
  def warning(lines, caption = nil)
735
- base_parablock "warning", lines, caption
710
+ base_parablock 'warning', lines, caption
736
711
  end
737
712
 
738
713
  alias_method :box, :insn
739
714
 
740
- def indepimage(id, caption=nil, metric=nil)
715
+ def indepimage(_lines, id, caption = nil, metric = nil)
716
+ metrics = parse_metric('top', metric)
717
+ metrics = " #{metrics}" if metrics.present?
741
718
  blank
742
719
  begin
743
- puts "◆→画像 #{@chapter.image(id).path.sub(/\A\.\//, "")} #{metric.join(" ")}←◆"
720
+ puts "◆→画像 #{@chapter.image(id).path.sub(%r{\A\./}, '')}#{metrics}←◆"
744
721
  rescue
745
- warn "no such image: #{id}"
722
+ warn "image not bound: #{id}"
746
723
  puts "◆→画像 #{id}←◆"
747
724
  end
748
725
  puts "図 #{compile_inline(caption)}" if caption.present?
@@ -751,9 +728,9 @@ module ReVIEW
751
728
 
752
729
  alias_method :numberlessimage, :indepimage
753
730
 
754
- def label(id)
731
+ def label(_id)
755
732
  # FIXME
756
- ""
733
+ ''
757
734
  end
758
735
 
759
736
  def dtp(str)
@@ -761,25 +738,25 @@ module ReVIEW
761
738
  end
762
739
 
763
740
  def bpo(lines)
764
- base_block "bpo", lines, nil
741
+ base_block 'bpo', lines, nil
765
742
  end
766
743
 
767
- def inline_dtp(str)
744
+ def inline_dtp(_str)
768
745
  # FIXME
769
- ""
746
+ ''
770
747
  end
771
748
 
772
- def inline_del(str)
749
+ def inline_del(_str)
773
750
  # FIXME
774
- ""
751
+ ''
775
752
  end
776
753
 
777
754
  def inline_code(str)
778
- %Q[△#{str}☆]
755
+ "△#{str}☆"
779
756
  end
780
757
 
781
- def inline_br(str)
782
- %Q(\n)
758
+ def inline_br(_str)
759
+ "\n"
783
760
  end
784
761
 
785
762
  def text(str)
@@ -787,20 +764,17 @@ module ReVIEW
787
764
  end
788
765
 
789
766
  def inline_chap(id)
790
- #"「第#{super}章 #{inline_title(id)}」"
767
+ # "「第#{super}章 #{inline_title(id)}」"
791
768
  # "第#{super}章"
792
769
  super
793
770
  end
794
771
 
795
772
  def inline_chapref(id)
796
- chs = ["", "", ""]
797
- if @book.config["chapref"]
798
- _chs = @book.config["chapref"].split(",")
799
- if _chs.size != 3
800
- error "--chapsplitter must have exactly 3 parameters with comma."
801
- else
802
- chs = _chs
803
- end
773
+ chs = ['', '', '']
774
+ if @book.config['chapref']
775
+ chs2 = @book.config['chapref'].split(',')
776
+ error '--chapsplitter must have exactly 3 parameters with comma.' if chs2.size != 3
777
+ chs = chs2
804
778
  end
805
779
  "#{chs[0]}#{@book.chapter_index.number(id)}#{chs[1]}#{@book.chapter_index.title(id)}#{chs[2]}"
806
780
  rescue KeyError
@@ -808,8 +782,8 @@ module ReVIEW
808
782
  nofunc_text("[UnknownChapter:#{id}]")
809
783
  end
810
784
 
811
- def source(lines, caption = nil, lang = nil)
812
- base_block "source", lines, caption
785
+ def source(lines, caption = nil, _lang = nil)
786
+ base_block 'source', lines, caption
813
787
  end
814
788
 
815
789
  def inline_ttibold(str)
@@ -817,16 +791,16 @@ module ReVIEW
817
791
  end
818
792
 
819
793
  def inline_labelref(idref)
820
- %Q(「◆→#{idref}←◆」) # 節、項を参照
794
+ "「◆→#{idref}←◆」" # 節、項を参照
821
795
  end
822
796
 
823
797
  alias_method :inline_ref, :inline_labelref
824
798
 
825
799
  def inline_pageref(idref)
826
- %Q(●ページ◆→#{idref}←◆) # ページ番号を参照
800
+ "●ページ◆→#{idref}←◆" # ページ番号を参照
827
801
  end
828
802
 
829
- def circle_begin(level, label, caption)
803
+ def circle_begin(_level, _label, caption)
830
804
  puts "・\t#{caption}"
831
805
  end
832
806
 
@@ -836,7 +810,5 @@ module ReVIEW
836
810
  def nofunc_text(str)
837
811
  str
838
812
  end
839
-
840
813
  end
841
-
842
814
  end # module ReVIEW