review 5.2.0 → 5.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby-win.yml +1 -1
  3. data/.rubocop.yml +3 -0
  4. data/NEWS.ja.md +53 -0
  5. data/NEWS.md +53 -0
  6. data/doc/format.ja.md +29 -3
  7. data/doc/format.md +32 -3
  8. data/lib/review/book/book_unit.rb +12 -2
  9. data/lib/review/book/index.rb +4 -1
  10. data/lib/review/builder.rb +51 -16
  11. data/lib/review/catalog.rb +1 -0
  12. data/lib/review/compiler.rb +4 -1
  13. data/lib/review/epubmaker/epubcommon.rb +4 -4
  14. data/lib/review/epubmaker.rb +3 -1
  15. data/lib/review/htmlbuilder.rb +24 -0
  16. data/lib/review/i18n.yml +6 -0
  17. data/lib/review/idgxmlbuilder.rb +21 -1
  18. data/lib/review/img_math.rb +1 -0
  19. data/lib/review/index_builder.rb +84 -18
  20. data/lib/review/latexbuilder.rb +16 -1
  21. data/lib/review/markdownbuilder.rb +10 -2
  22. data/lib/review/pdfmaker.rb +18 -3
  23. data/lib/review/plaintextbuilder.rb +3 -2
  24. data/lib/review/rstbuilder.rb +11 -2
  25. data/lib/review/textutils.rb +8 -7
  26. data/lib/review/tocprinter.rb +11 -6
  27. data/lib/review/topbuilder.rb +19 -1
  28. data/lib/review/version.rb +1 -1
  29. data/lib/review/volumeprinter.rb +9 -9
  30. data/samples/syntax-book/ch02.re +9 -0
  31. data/templates/latex/config.erb +3 -0
  32. data/templates/latex/review-jlreq/review-base.sty +2 -1
  33. data/templates/latex/review-jlreq/review-jlreq.cls +36 -3
  34. data/templates/latex/review-jsbook/review-base.sty +7 -1
  35. data/templates/latex/review-jsbook/review-jsbook.cls +31 -4
  36. data/test/assets/syntax_book_index_detail.txt +10 -8
  37. data/test/assets/test_template.tex +4 -1
  38. data/test/assets/test_template_backmatter.tex +4 -1
  39. data/test/test_book_chapter.rb +25 -2
  40. data/test/test_builder.rb +5 -3
  41. data/test/test_htmlbuilder.rb +42 -3
  42. data/test/test_idgxmlbuilder.rb +3 -3
  43. data/test/test_index.rb +30 -4
  44. data/test/test_latexbuilder.rb +17 -3
  45. data/test/test_markdownbuilder.rb +13 -0
  46. data/test/test_pdfmaker.rb +19 -0
  47. data/test/test_plaintextbuilder.rb +20 -4
  48. data/test/test_rstbuilder.rb +13 -0
  49. data/test/test_topbuilder.rb +18 -0
  50. metadata +2 -2
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2008-2020 Minero Aoki, Kenshi Muto, Masayoshi Takahashi,
1
+ # Copyright (c) 2008-2021 Minero Aoki, Kenshi Muto, Masayoshi Takahashi,
2
2
  # KADO Masanori
3
3
  #
4
4
  # This program is free software.
@@ -13,7 +13,8 @@ require 'review/sec_counter'
13
13
 
14
14
  module ReVIEW
15
15
  class IndexBuilder < Builder
16
- attr_reader :list_index, :table_index, :equation_index, :footnote_index,
16
+ attr_reader :list_index, :table_index, :equation_index,
17
+ :footnote_index, :endnote_index,
17
18
  :numberless_image_index, :image_index, :icon_index, :indepimage_index,
18
19
  :headline_index, :column_index, :bibpaper_index
19
20
 
@@ -53,11 +54,16 @@ module ReVIEW
53
54
  def builder_init_file
54
55
  super
55
56
  @headline_stack = []
57
+ @crossref = {
58
+ footnote: {},
59
+ endnote: {}
60
+ }
56
61
 
57
62
  @list_index = ReVIEW::Book::ListIndex.new
58
63
  @table_index = ReVIEW::Book::TableIndex.new
59
64
  @equation_index = ReVIEW::Book::EquationIndex.new
60
65
  @footnote_index = ReVIEW::Book::FootnoteIndex.new
66
+ @endnote_index = ReVIEW::Book::EndnoteIndex.new
61
67
  @headline_index = ReVIEW::Book::HeadlineIndex.new(@chapter)
62
68
  @column_index = ReVIEW::Book::ColumnIndex.new
63
69
  @chapter_index = ReVIEW::Book::ChapterIndex.new
@@ -73,6 +79,14 @@ module ReVIEW
73
79
  private :builder_init_file
74
80
 
75
81
  def result
82
+ %i[footnote endnote].each do |name|
83
+ @crossref[name].each_pair do |k, v|
84
+ if v == 0
85
+ warn "#{@chapter.basename}: #{name} ID #{k} is not referred."
86
+ end
87
+ end
88
+ end
89
+
76
90
  nil
77
91
  end
78
92
 
@@ -100,6 +114,7 @@ module ReVIEW
100
114
 
101
115
  item = ReVIEW::Book::Index::Item.new(item_id, @sec_counter.number_list, caption)
102
116
  @headline_index.add_item(item)
117
+ compile_inline(caption)
103
118
  end
104
119
 
105
120
  def nonum_begin(level, label, caption)
@@ -247,56 +262,73 @@ module ReVIEW
247
262
 
248
263
  alias_method :lead, :read
249
264
 
250
- def list(_lines, id, _caption, _lang = nil)
265
+ def list(lines, id, caption, _lang = nil)
251
266
  check_id(id)
252
267
  item = ReVIEW::Book::Index::Item.new(id, @list_index.size + 1)
253
268
  @list_index.add_item(item)
269
+ compile_inline(caption)
270
+ lines.each { |line| compile_inline(line) }
254
271
  end
255
272
 
256
- def source(_lines, _caption = nil, _lang = nil)
273
+ def source(lines, caption = nil, _lang = nil)
274
+ compile_inline(caption)
275
+ lines.each { |line| compile_inline(line) }
257
276
  end
258
277
 
259
- def listnum(_lines, id, _caption, _lang = nil)
278
+ def listnum(lines, id, caption, _lang = nil)
260
279
  check_id(id)
261
280
  item = ReVIEW::Book::Index::Item.new(id, @list_index.size + 1)
262
281
  @list_index.add_item(item)
282
+ compile_inline(caption)
283
+ lines.each { |line| compile_inline(line) }
263
284
  end
264
285
 
265
- def emlist(lines, caption = nil, lang = nil)
286
+ def emlist(lines, caption = nil, _lang = nil)
287
+ compile_inline(caption)
288
+ lines.each { |line| compile_inline(line) }
266
289
  end
267
290
 
268
- def emlistnum(lines, caption = nil, lang = nil)
291
+ def emlistnum(lines, caption = nil, _lang = nil)
292
+ compile_inline(caption)
293
+ lines.each { |line| compile_inline(line) }
269
294
  end
270
295
 
271
296
  def cmd(lines, caption = nil)
297
+ compile_inline(caption)
298
+ lines.each { |line| compile_inline(line) }
272
299
  end
273
300
 
274
301
  def quote(lines)
302
+ lines.each { |line| compile_inline(line) }
275
303
  end
276
304
 
277
305
  def image(_lines, id, caption, _metric = nil)
278
306
  check_id(id)
279
307
  item = ReVIEW::Book::Index::Item.new(id, @image_index.size + 1, caption)
280
308
  @image_index.add_item(item)
309
+ compile_inline(caption)
281
310
  end
282
311
 
283
- def table(_lines, id = nil, caption = nil)
312
+ def table(lines, id = nil, caption = nil)
284
313
  check_id(id)
285
314
  if id
286
315
  item = ReVIEW::Book::Index::Item.new(id, @table_index.size + 1, caption)
287
316
  @table_index.add_item(item)
288
317
  end
318
+ compile_inline(caption)
319
+ lines.each { |line| compile_inline(line) }
289
320
  end
290
321
 
291
- def emtable(_lines, _caption = nil)
322
+ def emtable(_lines, caption = nil)
292
323
  # item = ReVIEW::Book::TableIndex::Item.new(id, @table_index.size + 1)
293
324
  # @table_index << item
325
+ compile_inline(caption)
294
326
  end
295
327
 
296
328
  def comment(lines, comment = nil)
297
329
  end
298
330
 
299
- def imgtable(_lines, id, _caption = nil, _metric = nil)
331
+ def imgtable(_lines, id, caption = nil, _metric = nil)
300
332
  check_id(id)
301
333
  item = ReVIEW::Book::Index::Item.new(id, @table_index.size + 1)
302
334
  @table_index.add_item(item)
@@ -304,24 +336,37 @@ module ReVIEW
304
336
  ## to find image path
305
337
  item = ReVIEW::Book::Index::Item.new(id, @indepimage_index.size + 1)
306
338
  @indepimage_index.add_item(item)
339
+ compile_inline(caption)
307
340
  end
308
341
 
309
342
  def footnote(id, str)
310
343
  check_id(id)
344
+ @crossref[:footnote][id] ||= 0
311
345
  item = ReVIEW::Book::Index::Item.new(id, @footnote_index.size + 1, str)
312
346
  @footnote_index.add_item(item)
347
+ compile_inline(str)
313
348
  end
314
349
 
315
- def indepimage(_lines, id, _caption = '', _metric = nil)
350
+ def endnote(id, str)
351
+ check_id(id)
352
+ @crossref[:endnote][id] ||= 0
353
+ item = ReVIEW::Book::Index::Item.new(id, @endnote_index.size + 1, str)
354
+ @endnote_index.add_item(item)
355
+ compile_inline(str)
356
+ end
357
+
358
+ def indepimage(_lines, id, caption = '', _metric = nil)
316
359
  check_id(id)
317
360
  item = ReVIEW::Book::Index::Item.new(id, @indepimage_index.size + 1)
318
361
  @indepimage_index.add_item(item)
362
+ compile_inline(caption)
319
363
  end
320
364
 
321
- def numberlessimage(_lines, id, _caption = '', _metric = nil)
365
+ def numberlessimage(_lines, id, caption = '', _metric = nil)
322
366
  check_id(id)
323
367
  item = ReVIEW::Book::Index::Item.new(id, @indepimage_index.size + 1)
324
368
  @indepimage_index.add_item(item)
369
+ compile_inline(caption)
325
370
  end
326
371
 
327
372
  def hr
@@ -334,10 +379,12 @@ module ReVIEW
334
379
  def blankline
335
380
  end
336
381
 
337
- def flushright(_lines)
382
+ def flushright(lines)
383
+ lines.each { |line| compile_inline(line) }
338
384
  end
339
385
 
340
386
  def centering(lines)
387
+ lines.each { |line| compile_inline(line) }
341
388
  end
342
389
 
343
390
  def olnum(_num)
@@ -346,12 +393,16 @@ module ReVIEW
346
393
  def pagebreak
347
394
  end
348
395
 
349
- def bpo(_lines)
396
+ def bpo(lines)
397
+ lines.each { |line| compile_inline(line) }
350
398
  end
351
399
 
352
400
  def noindent
353
401
  end
354
402
 
403
+ def printendnotes
404
+ end
405
+
355
406
  def compile_inline(s)
356
407
  @compiler.text(s)
357
408
  end
@@ -388,7 +439,13 @@ module ReVIEW
388
439
  ''
389
440
  end
390
441
 
391
- def inline_fn(_id)
442
+ def inline_fn(id)
443
+ @crossref[:footnote][id] = @crossref[:footnote][id] ? @crossref[:footnote][id] + 1 : 1
444
+ ''
445
+ end
446
+
447
+ def inline_endnote(id)
448
+ @crossref[:endnote][id] = @crossref[:endnote][id] ? @crossref[:endnote][id] + 1 : 1
392
449
  ''
393
450
  end
394
451
 
@@ -464,10 +521,12 @@ module ReVIEW
464
521
  ''
465
522
  end
466
523
 
467
- def bibpaper(_lines, id, caption)
524
+ def bibpaper(lines, id, caption)
468
525
  check_id(id)
469
526
  item = ReVIEW::Book::Index::Item.new(id, @bibpaper_index.size + 1, caption)
470
527
  @bibpaper_index.add_item(item)
528
+ compile_inline(caption)
529
+ lines.each { |line| compile_inline(line) }
471
530
  end
472
531
 
473
532
  def inline_hd(_id)
@@ -602,12 +661,13 @@ module ReVIEW
602
661
  # ignore in indexing
603
662
  end
604
663
 
605
- def texequation(_lines, id = nil, _caption = '')
664
+ def texequation(_lines, id = nil, caption = '')
606
665
  check_id(id)
607
666
  if id
608
667
  item = ReVIEW::Book::Index::Item.new(id, @equation_index.size + 1)
609
668
  @equation_index.add_item(item)
610
669
  end
670
+ compile_inline(caption)
611
671
  end
612
672
 
613
673
  def get_chap(_chapter = nil)
@@ -618,10 +678,16 @@ module ReVIEW
618
678
  ''
619
679
  end
620
680
 
621
- def captionblock(_type, _lines, _caption, _specialstyle = nil)
681
+ def captionblock(_type, lines, caption, _specialstyle = nil)
682
+ compile_inline(caption)
683
+ lines.each { |line| compile_inline(line) }
622
684
  ''
623
685
  end
624
686
 
687
+ def graph(lines, id, _command, caption = '')
688
+ image(lines, id, caption)
689
+ end
690
+
625
691
  def tsize(_str)
626
692
  ''
627
693
  end
@@ -98,6 +98,8 @@ module ReVIEW
98
98
  private :puts
99
99
 
100
100
  def result
101
+ check_printendnotes
102
+
101
103
  if @chapter.is_a?(ReVIEW::Book::Part) && !@book.config.check_version('2', exception: false)
102
104
  puts '\end{reviewpart}'
103
105
  end
@@ -1151,6 +1153,19 @@ module ReVIEW
1151
1153
  app_error "unknown footnote: #{id}"
1152
1154
  end
1153
1155
 
1156
+ def inline_endnote(id)
1157
+ macro('endnote', compile_inline(@chapter.endnote(id).content.strip))
1158
+ rescue KeyError
1159
+ app_error "unknown footnote: #{id}"
1160
+ end
1161
+
1162
+ def printendnotes
1163
+ @shown_endnotes = true
1164
+ blank
1165
+ puts '\theendnotes'
1166
+ blank
1167
+ end
1168
+
1154
1169
  BOUTEN = '・'.freeze
1155
1170
 
1156
1171
  def inline_bou(str)
@@ -1345,7 +1360,7 @@ module ReVIEW
1345
1360
  end
1346
1361
 
1347
1362
  def inline_tcy(str)
1348
- macro('rensuji', escape(str))
1363
+ macro('reviewtcy', escape(str))
1349
1364
  end
1350
1365
 
1351
1366
  def inline_balloon(str)
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2013-2020 KADO Masanori, Masayoshi Takahashi, Kenshi Muto
1
+ # Copyright (c) 2013-2021 KADO Masanori, Masayoshi Takahashi, Kenshi Muto
2
2
  #
3
3
  # This program is free software.
4
4
  # You can distribute or modify this program under the terms of
@@ -98,7 +98,7 @@ module ReVIEW
98
98
  end
99
99
 
100
100
  def ul_item_begin(lines)
101
- puts ' ' * (@ul_indent - 1) + '* ' + join_lines_to_paragraph(lines)
101
+ puts (' ' * (@ul_indent - 1)) + '* ' + join_lines_to_paragraph(lines)
102
102
  end
103
103
 
104
104
  def ul_item_end
@@ -361,6 +361,14 @@ module ReVIEW
361
361
  "[^#{id}]"
362
362
  end
363
363
 
364
+ def inline_endnote(id)
365
+ "<sup>#{I18n.t('html_endnote_refmark', @chapter.endnote(id).number)}</sup>"
366
+ end
367
+
368
+ def endnote_item(id)
369
+ puts "#{I18n.t('html_endnote_textmark', @chapter.endnote(id).number)}#{compile_inline(@chapter.endnote(id).content)}"
370
+ end
371
+
364
372
  def inline_br(_str)
365
373
  "\n"
366
374
  end
@@ -318,12 +318,16 @@ module ReVIEW
318
318
  end
319
319
 
320
320
  def make_custom_page(file)
321
+ if file.nil?
322
+ return nil
323
+ end
324
+
321
325
  file_sty = file.to_s.sub(/\.[^.]+\Z/, '.tex')
322
326
  if File.exist?(file_sty)
323
- return File.read(file_sty)
327
+ File.read(file_sty)
328
+ else
329
+ warn "File #{file_sty} is not found."
324
330
  end
325
-
326
- nil
327
331
  end
328
332
 
329
333
  def join_with_separator(value, sep)
@@ -442,6 +446,10 @@ module ReVIEW
442
446
  end
443
447
  end
444
448
 
449
+ if @config['coverimage'] && !File.exist?(File.join(@config['imagedir'], @config['coverimage']))
450
+ raise ReVIEW::ConfigError, "coverimage #{@config['coverimage']} is not found."
451
+ end
452
+
445
453
  @locale_latex = {}
446
454
  part_tuple = I18n.get('part').split(/%[A-Za-z]{1,3}/, 2)
447
455
  chapter_tuple = I18n.get('chapter').split(/%[A-Za-z]{1,3}/, 2)
@@ -486,6 +494,13 @@ module ReVIEW
486
494
  template_path = 'layouts/layout.tex.erb'
487
495
  end
488
496
  ReVIEW::Template.generate(path: template_path, mode: '-', binding: binding, template_dir: template_dir)
497
+ rescue => e
498
+ if defined?(e.full_message)
499
+ error! "template or configuration error: #{e.full_message(highlight: false)}"
500
+ else
501
+ # <= Ruby 2.4
502
+ error! "template or configuration error: #{e.message}"
503
+ end
489
504
  end
490
505
 
491
506
  def copy_sty(dirname, copybase, extname = 'sty')
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2018-2020 Kenshi Muto
1
+ # Copyright (c) 2018-2021 Kenshi Muto
2
2
  #
3
3
  # This program is free software.
4
4
  # You can distribute or modify this program under the terms of
@@ -74,6 +74,7 @@ module ReVIEW
74
74
  private :blank
75
75
 
76
76
  def result
77
+ check_printendnotes
77
78
  solve_nest(@output.string)
78
79
  end
79
80
 
@@ -89,7 +90,7 @@ module ReVIEW
89
90
  clevel.pop
90
91
  lines.push("\x01→END←\x01")
91
92
  else
92
- lines.push("\t" * clevel.size + l)
93
+ lines.push(("\t" * clevel.size) + l)
93
94
  end
94
95
  end
95
96
 
@@ -86,6 +86,7 @@ module ReVIEW
86
86
  private :blank
87
87
 
88
88
  def result
89
+ check_printendnotes
89
90
  solve_nest(@output.string)
90
91
  end
91
92
 
@@ -124,7 +125,7 @@ module ReVIEW
124
125
  end
125
126
 
126
127
  def ul_item(lines)
127
- puts ' ' * (@ul_indent - 1) + "* #{join_lines_to_paragraph(lines)}"
128
+ puts (' ' * (@ul_indent - 1)) + "* #{join_lines_to_paragraph(lines)}"
128
129
  end
129
130
 
130
131
  def ul_end
@@ -138,7 +139,7 @@ module ReVIEW
138
139
  end
139
140
 
140
141
  def ol_item(lines, _num)
141
- puts ' ' * (@ol_indent - 1) + "#. #{join_lines_to_paragraph(lines)}"
142
+ puts (' ' * (@ol_indent - 1)) + "#. #{join_lines_to_paragraph(lines)}"
142
143
  end
143
144
 
144
145
  def ol_end
@@ -367,6 +368,14 @@ module ReVIEW
367
368
  " [##{id.sub(' ', '_')}]_ "
368
369
  end
369
370
 
371
+ def inline_endnote(id)
372
+ " [(#{@chapter.endnote(id).number})]_ "
373
+ end
374
+
375
+ def endnote_item(id)
376
+ puts ".. [(#{@chapter.endnote(id).number})] #{compile_inline(@chapter.endnote(id).content)}"
377
+ end
378
+
370
379
  def compile_ruby(base, ruby)
371
380
  " :ruby:`#{base}`<#{ruby}>`_ "
372
381
  end
@@ -15,7 +15,7 @@ module ReVIEW
15
15
  add = 0
16
16
  len = nil
17
17
  str.gsub("\t") do
18
- len = ts - ($`.size + add) % ts
18
+ len = ts - (($`.size + add) % ts)
19
19
  add += len - 1
20
20
  ' ' * len
21
21
  end
@@ -72,12 +72,13 @@ module ReVIEW
72
72
  end
73
73
 
74
74
  # lazy than rule 3, but it looks better
75
- if lazy &&
76
- (%i[F W H].include?(Unicode::Eaw.property(tail)) &&
77
- tail !~ /\p{Hangul}/) ||
78
- (%i[F W H].include?(Unicode::Eaw.property(head)) &&
79
- head !~ /\p{Hangul}/)
80
- space = nil
75
+ if lazy
76
+ if (%i[F W H].include?(Unicode::Eaw.property(tail)) &&
77
+ tail !~ /\p{Hangul}/) ||
78
+ (%i[F W H].include?(Unicode::Eaw.property(head)) &&
79
+ head !~ /\p{Hangul}/)
80
+ space = nil
81
+ end
81
82
  end
82
83
  end
83
84
  space
@@ -69,12 +69,17 @@ module ReVIEW
69
69
 
70
70
  def execute(*args)
71
71
  parse_options(args)
72
- @config = ReVIEW::Configure.create(yamlfile: @yamlfile)
73
- @book = ReVIEW::Book::Base.new('.', config: @config)
74
- unless File.readable?(@yamlfile)
75
- @logger.error("No such fiile or can't open #{@yamlfile}.")
72
+ begin
73
+ @config = ReVIEW::Configure.create(yamlfile: @yamlfile)
74
+ @book = ReVIEW::Book::Base.new('.', config: @config)
75
+ unless File.readable?(@yamlfile)
76
+ raise ReVIEW::FileNotFound, "No such fiile or can't open #{@yamlfile}."
77
+ end
78
+ rescue ReVIEW::ConfigError, ReVIEW::FileNotFound, ReVIEW::CompileError, ReVIEW::ApplicationError => e
79
+ @logger.error e.message
76
80
  exit 1
77
81
  end
82
+
78
83
  I18n.setup(@config['language'])
79
84
 
80
85
  if @detail
@@ -226,9 +231,9 @@ module ReVIEW
226
231
 
227
232
  case mode
228
233
  when :list
229
- (calc_linesize(line) - 1) / @book.page_metric.list.n_columns + 1
234
+ ((calc_linesize(line) - 1) / @book.page_metric.list.n_columns) + 1
230
235
  else # mode == :text
231
- (calc_linesize(line) - 1) / @book.page_metric.text.n_columns + 1
236
+ ((calc_linesize(line) - 1) / @book.page_metric.text.n_columns) + 1
232
237
  end
233
238
  end
234
239
 
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2008-2020 Minero Aoki, Kenshi Muto
1
+ # Copyright (c) 2008-2021 Minero Aoki, Kenshi Muto
2
2
  # 2002-2006 Minero Aoki
3
3
  #
4
4
  # This program is free software.
@@ -290,6 +290,24 @@ module ReVIEW
290
290
  app_error "unknown footnote: #{id}"
291
291
  end
292
292
 
293
+ def inline_endnote(id)
294
+ "【後注#{@chapter.endnote(id).number}】"
295
+ rescue KeyError
296
+ app_error "unknown endnote: #{id}"
297
+ end
298
+
299
+ def endnote_begin
300
+ puts '◆→開始:後注←◆'
301
+ end
302
+
303
+ def endnote_end
304
+ puts '◆→終了:後注←◆'
305
+ end
306
+
307
+ def endnote_item(id)
308
+ puts "【後注#{@chapter.endnote(id).number}】#{compile_inline(@chapter.endnote(id).content)}"
309
+ end
310
+
293
311
  def compile_ruby(base, ruby)
294
312
  "#{base}◆→DTP連絡:「#{base}」に「#{ruby}」とルビ←◆"
295
313
  end
@@ -1,3 +1,3 @@
1
1
  module ReVIEW
2
- VERSION = '5.2.0'.freeze
2
+ VERSION = '5.3.0'.freeze
3
3
  end
@@ -27,15 +27,15 @@ module ReVIEW
27
27
 
28
28
  def execute(*args)
29
29
  parse_options(args)
30
- @config = ReVIEW::Configure.create(yamlfile: @yamlfile)
31
- @book = ReVIEW::Book::Base.new('.', config: @config)
32
- unless File.readable?(@yamlfile)
33
- @logger.error("No such fiile or can't open #{@yamlfile}.")
34
- exit 1
35
- end
36
- I18n.setup(@book.config['language'])
37
-
38
30
  begin
31
+ @config = ReVIEW::Configure.create(yamlfile: @yamlfile)
32
+ @book = ReVIEW::Book::Base.new('.', config: @config)
33
+ unless File.readable?(@yamlfile)
34
+ raise ReVIEW::FileNotFound, "No such fiile or can't open #{@yamlfile}."
35
+ end
36
+
37
+ I18n.setup(@book.config['language'])
38
+
39
39
  @book.each_part do |part|
40
40
  if part.number
41
41
  print_chapter_volume(part)
@@ -44,7 +44,7 @@ module ReVIEW
44
44
  print_chapter_volume(chap)
45
45
  end
46
46
  end
47
- rescue ReVIEW::FileNotFound, ReVIEW::CompileError, ReVIEW::ApplicationError => e
47
+ rescue ReVIEW::ConfigError, ReVIEW::FileNotFound, ReVIEW::CompileError, ReVIEW::ApplicationError => e
48
48
  @logger.error e.message
49
49
  exit 1
50
50
  end
@@ -254,6 +254,12 @@ Tips。@<b>{太字bold}@<i>{italicイタ}@<tt>{等幅code}
254
254
 
255
255
  #@# doorquote、bpo、talk、graph、address、box、linebreak、pagebreak、hr、comment、abbr、acronym、dfn、kbd、q、samp、var、big、small、del、ins、recipe、dtp、raw、embed、include
256
256
 
257
+ == 後注
258
+ 後注は脚注と同様の書式で、@<tt>{//endnote}で内容@<endnote>{end1}、@<tt>{@}@<tt>{<endnote>}で参照します@<endnote>{end2}。後注は@<tt>{//printendnotes}を書いた箇所にまとめて書き出されます。ここではファイル末尾に置いています。
259
+
260
+ //endnote[end1][後注その1です。]
261
+ //endnote[end2][後注その2です。]
262
+
257
263
  == LaTeX式
258
264
  LaTeX式はTeX紙面以外は保証されません。EPUBではMathML(@<tt>{math_format: mathml})を使えますが、表現や互換性が不足しており、LaTeXをバックエンドとして画像化する@<tt>{math_format: imgmath}のほうがよさそうです。
259
265
 
@@ -361,3 +367,6 @@ labelで定義したラベルへの参照の例です。EPUBだと@<href>{#inlin
361
367
  @<hidx>{|}@<hidx>{{}@<hidx>$}$
362
368
 
363
369
  idx, hidxいずれも=見出しの中には入れないようにし、後続の段落先頭にhidxで入れるように注意します(入れてしまうと目次などがおかしくなります)。
370
+
371
+ ==== 後注
372
+ //printendnotes
@@ -124,6 +124,9 @@
124
124
  \ifdefined\reviewchapref\else% for 5.1.0 compatibility
125
125
  \newcommand{\reviewchapref}[2]{\hyperref[##2]{##1}}
126
126
  \fi
127
+ \ifdefined\reviewtcy\else% for 5.3.0 compatibility
128
+ \DeclareRobustCommand{\reviewtcy}[1]{\rensuji{##1}}
129
+ \fi
127
130
  }
128
131
 
129
132
  \makeatother
@@ -1,4 +1,4 @@
1
- \ProvidesClass{review-base}[2021/06/28]
1
+ \ProvidesClass{review-base}[2021/09/06]
2
2
  % jlreq用基本設定
3
3
  \def\recls@tmp{luatex}\ifx\recls@tmp\recls@driver
4
4
  \hypersetup{
@@ -186,6 +186,7 @@
186
186
  \DeclareRobustCommand{\reviewunderline}[1]{\underline{#1}}% ulemかjumolineで上書き。デフォルトはulemにしている
187
187
  \DeclareRobustCommand{\reviewit}[1]{\textit{#1}}
188
188
  \DeclareRobustCommand{\reviewbold}[1]{\textbf{#1}}
189
+ \DeclareRobustCommand{\reviewtcy}[1]{\tatechuyoko{#1}}
189
190
 
190
191
  % allow break line in tt
191
192
  % contributed by @zr_tex8r