review 3.2.0 → 4.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (105) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +26 -4
  3. data/.travis.yml +1 -1
  4. data/NEWS.ja.md +97 -1
  5. data/NEWS.md +97 -1
  6. data/bin/review-catalog-converter +1 -1
  7. data/bin/review-check +5 -5
  8. data/bin/review-checkdep +1 -1
  9. data/bin/review-compile +5 -5
  10. data/bin/review-idgxmlmaker +16 -0
  11. data/bin/review-index +7 -7
  12. data/bin/review-preproc +9 -9
  13. data/bin/review-validate +2 -2
  14. data/bin/review-vol +5 -5
  15. data/doc/config.yml.sample +14 -6
  16. data/doc/config.yml.sample-simple +1 -1
  17. data/doc/format.ja.md +15 -5
  18. data/doc/format.md +30 -18
  19. data/doc/pdfmaker.ja.md +1 -1
  20. data/doc/pdfmaker.md +1 -1
  21. data/lib/review/book.rb +1 -1
  22. data/lib/review/book/base.rb +23 -63
  23. data/lib/review/book/chapter.rb +18 -3
  24. data/lib/review/book/compilable.rb +5 -0
  25. data/lib/review/book/index.rb +26 -65
  26. data/lib/review/book/index/item.rb +40 -0
  27. data/lib/review/book/part.rb +22 -2
  28. data/lib/review/builder.rb +60 -40
  29. data/lib/review/catalog.rb +12 -15
  30. data/lib/review/compiler.rb +68 -36
  31. data/lib/review/configure.rb +10 -7
  32. data/lib/review/epubmaker.rb +5 -2
  33. data/lib/review/htmlbuilder.rb +24 -71
  34. data/lib/review/htmlutils.rb +2 -3
  35. data/lib/review/i18n.rb +2 -2
  36. data/lib/review/idgxmlbuilder.rb +101 -55
  37. data/lib/review/idgxmlmaker.rb +184 -0
  38. data/lib/review/init-web/finish.html +10 -0
  39. data/lib/review/init-web/index.html +190 -0
  40. data/lib/review/init-web/review-layout-design.js +691 -0
  41. data/lib/review/init.rb +110 -26
  42. data/lib/review/latexbuilder.rb +76 -54
  43. data/lib/review/lineinput.rb +1 -1
  44. data/lib/review/logger.rb +4 -8
  45. data/lib/review/makerhelper.rb +6 -4
  46. data/lib/review/markdownbuilder.rb +25 -38
  47. data/lib/review/md2inaobuilder.rb +3 -5
  48. data/lib/review/pdfmaker.rb +15 -15
  49. data/lib/review/plaintextbuilder.rb +67 -76
  50. data/lib/review/preprocessor.rb +13 -13
  51. data/lib/review/rstbuilder.rb +31 -31
  52. data/lib/review/textmaker.rb +13 -3
  53. data/lib/review/textutils.rb +77 -2
  54. data/lib/review/tocparser.rb +17 -17
  55. data/lib/review/tocprinter.rb +8 -8
  56. data/lib/review/topbuilder.rb +76 -57
  57. data/lib/review/update.rb +16 -16
  58. data/lib/review/version.rb +1 -1
  59. data/lib/review/webmaker.rb +2 -2
  60. data/lib/review/yamlloader.rb +3 -0
  61. data/review.gemspec +4 -3
  62. data/samples/sample-book/README.md +7 -2
  63. data/samples/sample-book/src/.gitignore +153 -0
  64. data/samples/sample-book/src/config-jlreq.yml +6 -0
  65. data/samples/sample-book/src/lib/tasks/review.rake +20 -9
  66. data/samples/sample-book/src/lib/tasks/z01_copy_sty.rake +14 -8
  67. data/samples/syntax-book/ch03.re +3 -6
  68. data/samples/syntax-book/config-jlreq.yml +5 -0
  69. data/samples/syntax-book/lib/tasks/review.rake +7 -7
  70. data/samples/syntax-book/lib/tasks/z01_copy_sty.rake +14 -8
  71. data/templates/latex/config.erb +6 -0
  72. data/templates/latex/layout.tex.erb +1 -0
  73. data/templates/latex/review-jlreq/review-base.sty +93 -31
  74. data/templates/latex/review-jlreq/review-jlreq.cls +6 -0
  75. data/templates/latex/review-jlreq/review-style.sty +3 -0
  76. data/templates/latex/review-jsbook/README.md +39 -0
  77. data/templates/latex/review-jsbook/review-base.sty +65 -10
  78. data/templates/latex/review-jsbook/review-jsbook.cls +4 -0
  79. data/templates/latex/review-jsbook/review-style.sty +4 -1
  80. data/test/assets/test_template.tex +11 -3
  81. data/test/assets/test_template_backmatter.tex +11 -3
  82. data/test/test_book.rb +65 -19
  83. data/test/test_catalog.rb +18 -42
  84. data/test/test_catalog_converter_cmd.rb +1 -1
  85. data/test/test_epubmaker_cmd.rb +2 -2
  86. data/test/test_helper.rb +1 -1
  87. data/test/test_htmlbuilder.rb +144 -55
  88. data/test/test_i18n.rb +25 -25
  89. data/test/test_idgxmlbuilder.rb +60 -18
  90. data/test/test_image_finder.rb +6 -6
  91. data/test/test_latexbuilder.rb +128 -24
  92. data/test/test_latexbuilder_v2.rb +23 -23
  93. data/test/test_logger.rb +14 -1
  94. data/test/test_makerhelper.rb +3 -3
  95. data/test/test_markdownbuilder.rb +45 -4
  96. data/test/test_md2inaobuilder.rb +12 -2
  97. data/test/test_pdfmaker.rb +1 -1
  98. data/test/test_pdfmaker_cmd.rb +1 -1
  99. data/test/test_plaintextbuilder.rb +31 -6
  100. data/test/test_rstbuilder.rb +33 -4
  101. data/test/test_textutils.rb +109 -2
  102. data/test/test_topbuilder.rb +35 -7
  103. data/test/test_update.rb +17 -8
  104. data/test/test_yamlloader.rb +13 -0
  105. metadata +26 -2
@@ -6,7 +6,7 @@ module ReVIEW
6
6
  n = 0
7
7
  while line = gets
8
8
  unless line.strip =~ /\A\#@/
9
- ungets line
9
+ ungets(line)
10
10
  return n
11
11
  end
12
12
  n += 1
@@ -2,18 +2,14 @@ require 'logger'
2
2
 
3
3
  module ReVIEW
4
4
  class Logger < ::Logger
5
- def initialize(*logdev)
6
- if logdev.empty?
7
- super(STDERR)
8
- self.formatter = ->(severity, _datetime, _progname, msg) { "#{severity}: #{msg}\n" }
9
- else
10
- super
11
- end
5
+ def initialize(io = STDERR, progname: '--')
6
+ super(io, progname: progname)
7
+ self.formatter = ->(severity, _datetime, name, msg) { "#{severity} #{name}: #{msg}\n" }
12
8
  end
13
9
  end
14
10
 
15
11
  def self.logger
16
- @logger ||= ReVIEW::Logger.new
12
+ @logger ||= ReVIEW::Logger.new(STDERR, progname: File.basename($PROGRAM_NAME, '.*'))
17
13
  end
18
14
 
19
15
  def self.logger=(logger)
@@ -55,7 +55,7 @@ module ReVIEW
55
55
  exts = options[:exts] || %w[png gif jpg jpeg svg pdf eps ai tif psd]
56
56
  exts_str = exts.join('|')
57
57
  if !is_converted && fname =~ /\.(#{exts_str})$/i
58
- FileUtils.cp "#{from_dir}/#{fname}", to_dir
58
+ FileUtils.cp("#{from_dir}/#{fname}", to_dir)
59
59
  image_files << "#{from_dir}/#{fname}"
60
60
  end
61
61
  end
@@ -66,8 +66,8 @@ module ReVIEW
66
66
  end
67
67
  module_function :copy_images_to_dir
68
68
 
69
- def cleanup_mathimg
70
- math_dir = "./#{@config['imagedir']}/_review_math"
69
+ def cleanup_mathimg(path = '_review_math')
70
+ math_dir = "./#{@config['imagedir']}/#{path}"
71
71
  if @config['imgmath'] && Dir.exist?(math_dir)
72
72
  FileUtils.rm_rf(math_dir)
73
73
  end
@@ -141,6 +141,7 @@ EOB
141
141
  end
142
142
 
143
143
  def make_math_images_pdfcrop(dir, tex_path, math_dir)
144
+ # rubocop:disable Metrics/BlockLength
144
145
  Dir.chdir(dir) do
145
146
  dvi_path = '__IMGMATH__.dvi'
146
147
  pdf_path = '__IMGMATH__.pdf'
@@ -155,7 +156,6 @@ EOB
155
156
  raise CompileError
156
157
  end
157
158
  end
158
-
159
159
  args = @config['imgmath_options']['pdfcrop_cmd'].shellsplit
160
160
  args.map! do |m|
161
161
  m.sub('%i', pdf_path).
@@ -201,6 +201,7 @@ EOB
201
201
  args = @config['imgmath_options']['pdfcrop_pixelize_cmd'].shellsplit
202
202
  args.map! do |m|
203
203
  m.sub('%i', pdf_path2).
204
+ sub('%t', @config['imgmath_options']['format']).
204
205
  sub('%o', File.join(math_dir, "_gen_#{key}.#{@config['imgmath_options']['format']}")).
205
206
  sub('%O', File.join(math_dir, "_gen_#{key}")).
206
207
  sub('%p', page.to_s)
@@ -213,6 +214,7 @@ EOB
213
214
  end
214
215
  end
215
216
  end
217
+ # rubocop:enable Metrics/BlockLength
216
218
  end
217
219
 
218
220
  def make_math_images_dvipng(dir, tex_path, math_dir)
@@ -1,3 +1,5 @@
1
+ # Copyright (c) 2013-2019 KADO Masanori, Masayoshi Takahashi, Kenshi Muto
2
+ #
1
3
  # This program is free software.
2
4
  # You can distribute or modify this program under the terms of
3
5
  # the GNU LGPL, Lesser General Public License version 2.1.
@@ -50,11 +52,11 @@ module ReVIEW
50
52
 
51
53
  def paragraph(lines)
52
54
  if @noindent
53
- puts %Q(<p class="noindent">#{lines.join}</p>)
55
+ puts %Q(<p class="noindent">#{join_lines_to_paragraph(lines)}</p>)
54
56
  puts "\n"
55
57
  @noindent = nil
56
58
  else
57
- puts lines.join
59
+ puts join_lines_to_paragraph(lines)
58
60
  puts "\n"
59
61
  end
60
62
  end
@@ -63,24 +65,26 @@ module ReVIEW
63
65
  @noindent = true
64
66
  end
65
67
 
66
- def list_header(id, caption, lang)
68
+ def list_header(id, caption, _lang)
67
69
  if get_chap.nil?
68
70
  print %Q(リスト#{@chapter.list(id).number} #{compile_inline(caption)}\n\n)
69
71
  else
70
72
  print %Q(リスト#{get_chap}.#{@chapter.list(id).number} #{compile_inline(caption)}\n\n)
71
73
  end
72
- lang ||= ''
73
- puts "```#{lang}"
74
74
  end
75
75
 
76
- def list_body(_id, lines, _lang)
76
+ def list_body(_id, lines, lang)
77
+ lang ||= ''
78
+ puts "```#{lang}"
77
79
  lines.each do |line|
78
80
  puts detab(line)
79
81
  end
80
82
  puts '```'
81
83
  end
82
84
 
83
- def listnum_body(lines, _lang)
85
+ def listnum_body(lines, lang)
86
+ lang ||= ''
87
+ puts "```#{lang}"
84
88
  lines.each_with_index do |line, i|
85
89
  puts((i + 1).to_s.rjust(2) + ": #{detab(line)}")
86
90
  end
@@ -93,7 +97,7 @@ module ReVIEW
93
97
  end
94
98
 
95
99
  def ul_item_begin(lines)
96
- puts ' ' * (@ul_indent - 1) + '* ' + lines.join
100
+ puts ' ' * (@ul_indent - 1) + '* ' + join_lines_to_paragraph(lines)
97
101
  end
98
102
 
99
103
  def ul_item_end
@@ -109,7 +113,7 @@ module ReVIEW
109
113
  end
110
114
 
111
115
  def ol_item(lines, num)
112
- puts "#{num}. #{lines.join}"
116
+ puts "#{num}. #{join_lines_to_paragraph(lines)}"
113
117
  end
114
118
 
115
119
  def ol_end
@@ -125,7 +129,7 @@ module ReVIEW
125
129
  end
126
130
 
127
131
  def dd(lines)
128
- puts "<dd>#{lines.join}</dd>"
132
+ puts "<dd>#{join_lines_to_paragraph(lines)}</dd>"
129
133
  end
130
134
 
131
135
  def dl_end
@@ -134,9 +138,9 @@ module ReVIEW
134
138
 
135
139
  def emlist(lines, caption = nil, lang = nil)
136
140
  blank
137
- if caption
141
+ if caption.present?
138
142
  puts caption
139
- print "\n"
143
+ blank
140
144
  end
141
145
  lang ||= ''
142
146
  puts "```#{lang}"
@@ -236,7 +240,11 @@ module ReVIEW
236
240
  'jpg'
237
241
  end
238
242
 
239
- def cmd(lines)
243
+ def cmd(lines, caption = nil)
244
+ if caption.present?
245
+ puts caption
246
+ blank
247
+ end
240
248
  puts '```shell-session'
241
249
  lines.each do |line|
242
250
  puts detab(line)
@@ -244,32 +252,12 @@ module ReVIEW
244
252
  puts '```'
245
253
  end
246
254
 
247
- def table(lines, id = nil, caption = nil)
248
- rows = []
249
- sepidx = nil
250
- lines.each_with_index do |line, idx|
251
- if /\A[\=\-]{12}/ =~ line
252
- # just ignore
253
- # error "too many table separator" if sepidx
254
- sepidx ||= idx
255
- next
256
- end
257
- rows.push(line.strip.split(/\t+/).map { |s| s.sub(/\A\./, '') })
258
- end
259
- rows = adjust_n_cols(rows)
260
- error 'no rows in the table' if rows.empty?
261
-
262
- begin
263
- table_header id, caption unless caption.nil?
264
- rescue KeyError
265
- error "no such table: #{id}"
266
- end
267
- table_begin rows.first.size
255
+ def table_rows(sepidx, rows)
268
256
  if sepidx
269
257
  sepidx.times do
270
258
  tr(rows.shift.map { |s| th(s) })
271
259
  end
272
- table_border rows.first.size
260
+ table_border(rows.first.size)
273
261
  rows.each do |cols|
274
262
  tr(cols.map { |s| td(s) })
275
263
  end
@@ -279,7 +267,6 @@ module ReVIEW
279
267
  tr([th(h)] + cs.map { |s| td(s) })
280
268
  end
281
269
  end
282
- table_end
283
270
  end
284
271
 
285
272
  def table_header(id, caption)
@@ -355,7 +342,7 @@ module ReVIEW
355
342
  return unless @book.config['draft']
356
343
  lines ||= []
357
344
  unless comment.blank?
358
- lines.unshift comment
345
+ lines.unshift(comment)
359
346
  end
360
347
  str = lines.join('<br />')
361
348
  puts %Q(<div class="red">#{escape(str)}</div>)
@@ -380,7 +367,7 @@ module ReVIEW
380
367
 
381
368
  def flushright(lines)
382
369
  puts %Q(<div class="flushright">)
383
- puts lines.join
370
+ puts split_paragraph(lines).join("\n")
384
371
  puts %Q(</div>)
385
372
  end
386
373
  end
@@ -7,13 +7,11 @@ require 'review/markdownbuilder'
7
7
  module ReVIEW
8
8
  class MD2INAOBuilder < MARKDOWNBuilder
9
9
  def paragraph(lines)
10
- puts ' ' + lines.join
10
+ puts ' ' + join_lines_to_paragraph(lines)
11
11
  puts "\n"
12
12
  end
13
13
 
14
- def list_header(id, caption, lang)
15
- lang ||= ''
16
- puts "```#{lang}"
14
+ def list_header(id, caption, _lang)
17
15
  print %Q(●リスト#{@chapter.list(id).number}::#{compile_inline(caption)}\n\n)
18
16
  end
19
17
 
@@ -35,7 +33,7 @@ module ReVIEW
35
33
  end
36
34
 
37
35
  def dd(lines)
38
- puts "<dd>#{lines.join}</dd>"
36
+ puts "<dd>#{join_lines_to_paragraph(lines)}</dd>"
39
37
  end
40
38
 
41
39
  def dl_end
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2010-2018 Kenshi Muto and Masayoshi Takahashi
1
+ # Copyright (c) 2010-2019 Kenshi Muto and Masayoshi Takahashi
2
2
  #
3
3
  # This program is free software.
4
4
  # You can distribute or modify this program under the terms of
@@ -54,12 +54,12 @@ module ReVIEW
54
54
  end
55
55
 
56
56
  def error(msg)
57
- @logger.error "#{File.basename($PROGRAM_NAME, '.*')}: #{msg}"
57
+ @logger.error msg
58
58
  exit 1
59
59
  end
60
60
 
61
61
  def warn(msg)
62
- @logger.warn "#{File.basename($PROGRAM_NAME, '.*')}: #{msg}"
62
+ @logger.warn msg
63
63
  end
64
64
 
65
65
  def pdf_filepath
@@ -153,20 +153,20 @@ module ReVIEW
153
153
  end
154
154
 
155
155
  begin
156
- generate_pdf(yamlfile)
156
+ generate_pdf
157
157
  rescue ApplicationError => e
158
158
  raise if @config['debug']
159
159
  error(e.message)
160
160
  end
161
161
  end
162
162
 
163
- def make_input_files(book, yamlfile)
163
+ def make_input_files(book)
164
164
  input_files = Hash.new { |h, key| h[key] = '' }
165
165
  book.parts.each do |part|
166
166
  if part.name.present?
167
167
  @config['use_part'] = true
168
168
  if part.file?
169
- output_chaps(part.name, yamlfile)
169
+ output_chaps(part.name)
170
170
  input_files['CHAPS'] << %Q(\\input{#{part.name}.tex}\n)
171
171
  else
172
172
  input_files['CHAPS'] << %Q(\\part{#{part.name}}\n)
@@ -175,7 +175,7 @@ module ReVIEW
175
175
 
176
176
  part.chapters.each do |chap|
177
177
  filename = File.basename(chap.path, '.*')
178
- output_chaps(filename, yamlfile)
178
+ output_chaps(filename)
179
179
  input_files['PREDEF'] << "\\input{#{filename}.tex}\n" if chap.on_predef?
180
180
  input_files['CHAPS'] << "\\input{#{filename}.tex}\n" if chap.on_chaps?
181
181
  input_files['APPENDIX'] << "\\input{#{filename}.tex}\n" if chap.on_appendix?
@@ -189,7 +189,7 @@ module ReVIEW
189
189
  def build_pdf
190
190
  template = template_content
191
191
  Dir.chdir(@path) do
192
- File.open("./#{@mastertex}.tex", 'wb') { |f| f.write(template) }
192
+ File.open("./#{@mastertex}.tex", 'wb') { |f| f.write template }
193
193
 
194
194
  call_hook('hook_beforetexcompile')
195
195
 
@@ -250,18 +250,18 @@ module ReVIEW
250
250
  end
251
251
  end
252
252
 
253
- def generate_pdf(yamlfile)
253
+ def generate_pdf
254
254
  remove_old_file
255
255
  erb_config
256
256
  @path = build_path
257
257
  begin
258
258
  @compile_errors = nil
259
259
 
260
- book = ReVIEW::Book.load(File.dirname(yamlfile))
260
+ book = ReVIEW::Book.load(@basedir)
261
261
  book.config = @config
262
262
  @converter = ReVIEW::Converter.new(book, ReVIEW::LATEXBuilder.new)
263
263
 
264
- @input_files = make_input_files(book, yamlfile)
264
+ @input_files = make_input_files(book)
265
265
 
266
266
  check_compile_status(@config['ignore-errors'])
267
267
 
@@ -281,11 +281,11 @@ module ReVIEW
281
281
 
282
282
  FileUtils.cp(File.join(@path, "#{@mastertex}.pdf"), pdf_filepath)
283
283
  ensure
284
- remove_entry_secure @path unless @config['debug']
284
+ remove_entry_secure(@path) unless @config['debug']
285
285
  end
286
286
  end
287
287
 
288
- def output_chaps(filename, _yamlfile)
288
+ def output_chaps(filename)
289
289
  @logger.info "compiling #{filename}.tex"
290
290
  begin
291
291
  @converter.convert(filename + '.re', File.join(@path, filename + '.tex'))
@@ -454,7 +454,7 @@ module ReVIEW
454
454
  def erb_content(file)
455
455
  @texcompiler = File.basename(@config['texcommand'], '.*')
456
456
  erb = ReVIEW::Template.load(file, '-')
457
- @logger.debug "erb processes #{File.basename(file)}" if @config['debug']
457
+ @logger.debug("erb processes #{File.basename(file)}") if @config['debug']
458
458
  erb.result(binding)
459
459
  end
460
460
 
@@ -489,7 +489,7 @@ module ReVIEW
489
489
  f.print erb_content(File.join(dirname, fname))
490
490
  end
491
491
  else
492
- FileUtils.cp File.join(dirname, fname), copybase
492
+ FileUtils.cp(File.join(dirname, fname), copybase)
493
493
  end
494
494
  end
495
495
  end
@@ -87,7 +87,7 @@ module ReVIEW
87
87
  end
88
88
 
89
89
  def ul_item(lines)
90
- puts lines.join
90
+ puts join_lines_to_paragraph(lines)
91
91
  end
92
92
 
93
93
  def ul_end
@@ -100,7 +100,7 @@ module ReVIEW
100
100
  end
101
101
 
102
102
  def ol_item(lines, num)
103
- puts "#{num} #{lines.join}"
103
+ puts "#{num} #{join_lines_to_paragraph(lines)}"
104
104
  end
105
105
 
106
106
  def ol_end
@@ -127,7 +127,7 @@ module ReVIEW
127
127
  end
128
128
 
129
129
  def paragraph(lines)
130
- puts lines.join
130
+ puts join_lines_to_paragraph(lines)
131
131
  end
132
132
 
133
133
  def read(lines)
@@ -137,21 +137,30 @@ module ReVIEW
137
137
 
138
138
  alias_method :lead, :read
139
139
 
140
- def list_header(id, caption, _lang)
140
+ def list(lines, id, caption, lang = nil)
141
+ blank
142
+ begin
143
+ list_header(id, caption, lang)
144
+ rescue KeyError
145
+ error "no such list: #{id}"
146
+ end
147
+ blank
148
+ list_body(id, lines, lang)
141
149
  blank
150
+ end
151
+
152
+ def list_header(id, caption, _lang)
142
153
  if get_chap
143
154
  puts %Q(#{I18n.t('list')}#{I18n.t('format_number', [get_chap, @chapter.list(id).number])}#{I18n.t('caption_prefix_idgxml')}#{compile_inline(caption)})
144
155
  else
145
156
  puts %Q(#{I18n.t('list')}#{I18n.t('format_number_without_chapter', [@chapter.list(id).number])}#{I18n.t('caption_prefix_idgxml')}#{compile_inline(caption)})
146
157
  end
147
- blank
148
158
  end
149
159
 
150
160
  def list_body(_id, lines, _lang)
151
161
  lines.each do |line|
152
162
  puts detab(line)
153
163
  end
154
- blank
155
164
  end
156
165
 
157
166
  def base_block(_type, lines, caption = nil)
@@ -169,7 +178,7 @@ module ReVIEW
169
178
  end
170
179
 
171
180
  def emlist(lines, caption = nil, _lang = nil)
172
- base_block 'emlist', lines, caption
181
+ base_block('emlist', lines, caption)
173
182
  end
174
183
 
175
184
  def emlistnum(lines, caption = nil, _lang = nil)
@@ -181,19 +190,30 @@ module ReVIEW
181
190
  blank
182
191
  end
183
192
 
193
+ def listnum(lines, id, caption, lang = nil)
194
+ blank
195
+ begin
196
+ list_header(id, caption, lang)
197
+ rescue KeyError
198
+ error "no such list: #{id}"
199
+ end
200
+ blank
201
+ listnum_body(lines, lang)
202
+ blank
203
+ end
204
+
184
205
  def listnum_body(lines, _lang)
185
206
  lines.each_with_index do |line, i|
186
207
  puts((i + 1).to_s.rjust(2) + ": #{line}")
187
208
  end
188
- blank
189
209
  end
190
210
 
191
211
  def cmd(lines, caption = nil)
192
- base_block 'cmd', lines, caption
212
+ base_block('cmd', lines, caption)
193
213
  end
194
214
 
195
215
  def quote(lines)
196
- base_parablock 'quote', lines, nil
216
+ base_parablock('quote', lines, nil)
197
217
  end
198
218
 
199
219
  def image(_lines, id, caption, _metric = nil)
@@ -207,56 +227,27 @@ module ReVIEW
207
227
  end
208
228
 
209
229
  def texequation(lines, id = nil, caption = '')
230
+ blank
231
+ texequation_header(id, caption)
232
+ puts lines.join("\n")
233
+ blank
234
+ end
235
+
236
+ def texequation_header(id, caption)
210
237
  if id
211
- blank
212
238
  if get_chap
213
239
  puts "#{I18n.t('equation')}#{I18n.t('format_number', [get_chap, @chapter.equation(id).number])}#{I18n.t('caption_prefix_idgxml')}#{compile_inline(caption)}"
214
240
  else
215
241
  puts "#{I18n.t('equation')}#{I18n.t('format_number_without_chapter', [@chapter.equation(id).number])}#{I18n.t('caption_prefix_idgxml')}#{compile_inline(caption)}"
216
242
  end
217
243
  end
218
-
219
- puts lines.join("\n")
220
- blank
221
244
  end
222
245
 
223
- def table(lines, id = nil, caption = nil)
224
- rows = []
225
- sepidx = nil
226
- lines.each_with_index do |line, idx|
227
- if /\A[\=\-]{12}/ =~ line
228
- # just ignore
229
- # error "too many table separator" if sepidx
230
- sepidx ||= idx
231
- next
232
- end
233
- rows.push(line.strip.split(/\t+/).map { |s| s.sub(/\A\./, '') })
234
- end
235
- rows = adjust_n_cols(rows)
236
- error 'no rows in the table' if rows.empty?
237
-
238
- blank
239
-
240
- begin
241
- table_header(id, caption) if caption.present?
242
- rescue KeyError
243
- error "no such table: #{id}"
244
- end
245
- table_begin rows.first.size
246
- if sepidx
247
- sepidx.times do
248
- tr(rows.shift.map { |s| th(s) })
249
- end
250
- rows.each do |cols|
251
- tr(cols.map { |s| td(s) })
252
- end
253
- else
254
- rows.each do |cols|
255
- h, *cs = *cols
256
- tr([th(h)] + cs.map { |s| td(s) })
257
- end
246
+ def table(lines, id = nil, caption = nil, noblank = nil)
247
+ unless noblank
248
+ blank
258
249
  end
259
- table_end
250
+ super(lines, id, caption)
260
251
  end
261
252
 
262
253
  def table_header(id, caption)
@@ -345,8 +336,8 @@ module ReVIEW
345
336
  end
346
337
 
347
338
  def bibpaper(lines, id, caption)
348
- bibpaper_header id, caption
349
- bibpaper_bibpaper id, caption, lines unless lines.empty?
339
+ bibpaper_header(id, caption)
340
+ bibpaper_bibpaper(id, caption, lines) unless lines.empty?
350
341
  end
351
342
 
352
343
  def bibpaper_header(id, caption)
@@ -355,7 +346,7 @@ module ReVIEW
355
346
  end
356
347
 
357
348
  def bibpaper_bibpaper(_id, _caption, lines)
358
- print split_paragraph(lines).join
349
+ puts split_paragraph(lines).join("\n")
359
350
  end
360
351
 
361
352
  def inline_bib(id)
@@ -472,87 +463,87 @@ module ReVIEW
472
463
  end
473
464
 
474
465
  def flushright(lines)
475
- base_parablock 'flushright', lines, nil
466
+ base_parablock('flushright', lines, nil)
476
467
  end
477
468
 
478
469
  def centering(lines)
479
- base_parablock 'centering', lines, nil
470
+ base_parablock('centering', lines, nil)
480
471
  end
481
472
 
482
473
  def note(lines, caption = nil)
483
- base_parablock 'note', lines, caption
474
+ base_parablock('note', lines, caption)
484
475
  end
485
476
 
486
477
  def memo(lines, caption = nil)
487
- base_parablock 'memo', lines, caption
478
+ base_parablock('memo', lines, caption)
488
479
  end
489
480
 
490
481
  def tip(lines, caption = nil)
491
- base_parablock 'tip', lines, caption
482
+ base_parablock('tip', lines, caption)
492
483
  end
493
484
 
494
485
  def info(lines, caption = nil)
495
- base_parablock 'info', lines, caption
486
+ base_parablock('info', lines, caption)
496
487
  end
497
488
 
498
489
  def planning(lines, caption = nil)
499
- base_parablock 'planning', lines, caption
490
+ base_parablock('planning', lines, caption)
500
491
  end
501
492
 
502
493
  def best(lines, caption = nil)
503
- base_parablock 'best', lines, caption
494
+ base_parablock('best', lines, caption)
504
495
  end
505
496
 
506
497
  def important(lines, caption = nil)
507
- base_parablock 'important', lines, caption
498
+ base_parablock('important', lines, caption)
508
499
  end
509
500
 
510
501
  def security(lines, caption = nil)
511
- base_parablock 'security', lines, caption
502
+ base_parablock('security', lines, caption)
512
503
  end
513
504
 
514
505
  def caution(lines, caption = nil)
515
- base_parablock 'caution', lines, caption
506
+ base_parablock('caution', lines, caption)
516
507
  end
517
508
 
518
509
  def term(lines)
519
- base_parablock 'term', lines, nil
510
+ base_parablock('term', lines, nil)
520
511
  end
521
512
 
522
513
  def link(lines, caption = nil)
523
- base_parablock 'link', lines, caption
514
+ base_parablock('link', lines, caption)
524
515
  end
525
516
 
526
517
  def notice(lines, caption = nil)
527
- base_parablock 'notice', lines, caption
518
+ base_parablock('notice', lines, caption)
528
519
  end
529
520
 
530
521
  def point(lines, caption = nil)
531
- base_parablock 'point', lines, caption
522
+ base_parablock('point', lines, caption)
532
523
  end
533
524
 
534
525
  def shoot(lines, caption = nil)
535
- base_parablock 'shoot', lines, caption
526
+ base_parablock('shoot', lines, caption)
536
527
  end
537
528
 
538
529
  def reference(lines)
539
- base_parablock 'reference', lines, nil
530
+ base_parablock('reference', lines, nil)
540
531
  end
541
532
 
542
533
  def practice(lines)
543
- base_parablock 'practice', lines, nil
534
+ base_parablock('practice', lines, nil)
544
535
  end
545
536
 
546
537
  def expert(lines)
547
- base_parablock 'expert', lines, nil
538
+ base_parablock('expert', lines, nil)
548
539
  end
549
540
 
550
541
  def insn(lines, caption = nil)
551
- base_block 'insn', lines, caption
542
+ base_block('insn', lines, caption)
552
543
  end
553
544
 
554
545
  def warning(lines, caption = nil)
555
- base_parablock 'warning', lines, caption
546
+ base_parablock('warning', lines, caption)
556
547
  end
557
548
 
558
549
  alias_method :box, :insn
@@ -573,7 +564,7 @@ module ReVIEW
573
564
  end
574
565
 
575
566
  def bpo(lines)
576
- base_block 'bpo', lines, nil
567
+ base_block('bpo', lines, nil)
577
568
  end
578
569
 
579
570
  def inline_dtp(_str)
@@ -623,7 +614,7 @@ module ReVIEW
623
614
  end
624
615
 
625
616
  def source(lines, caption = nil, _lang = nil)
626
- base_block 'source', lines, caption
617
+ base_block('source', lines, caption)
627
618
  end
628
619
 
629
620
  def inline_labelref(_idref)