review 4.2.0 → 5.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (165) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby-win.yml +11 -5
  3. data/.rubocop.yml +113 -24
  4. data/NEWS.ja.md +94 -0
  5. data/NEWS.md +94 -0
  6. data/bin/review-catalog-converter +1 -1
  7. data/bin/review-check +2 -4
  8. data/bin/review-checkdep +1 -1
  9. data/bin/review-compile +8 -14
  10. data/bin/review-validate +1 -1
  11. data/doc/config.yml.sample +4 -1
  12. data/doc/config.yml.sample-simple +1 -1
  13. data/doc/format.ja.md +83 -4
  14. data/doc/format.md +84 -7
  15. data/doc/makeindex.ja.md +2 -2
  16. data/doc/quickstart.ja.md +3 -3
  17. data/doc/quickstart.md +2 -2
  18. data/lib/epubmaker/content.rb +3 -2
  19. data/lib/epubmaker/epubcommon.rb +33 -25
  20. data/lib/epubmaker/epubv2.rb +5 -6
  21. data/lib/epubmaker/epubv3.rb +20 -18
  22. data/lib/review/book.rb +2 -2
  23. data/lib/review/book/base.rb +61 -25
  24. data/lib/review/book/bib.rb +21 -0
  25. data/lib/review/book/book_unit.rb +155 -0
  26. data/lib/review/book/chapter.rb +30 -26
  27. data/lib/review/book/index.rb +23 -185
  28. data/lib/review/book/index/item.rb +7 -1
  29. data/lib/review/book/part.rb +21 -9
  30. data/lib/review/book/volume.rb +1 -1
  31. data/lib/review/builder.rb +68 -13
  32. data/lib/review/catalog.rb +2 -2
  33. data/lib/review/compiler.rb +159 -73
  34. data/lib/review/configure.rb +22 -1
  35. data/lib/review/converter.rb +1 -1
  36. data/lib/review/epub2html.rb +6 -1
  37. data/lib/review/epubmaker.rb +12 -23
  38. data/lib/review/htmlbuilder.rb +36 -7
  39. data/lib/review/htmlutils.rb +7 -10
  40. data/lib/review/i18n.rb +1 -1
  41. data/lib/review/idgxmlbuilder.rb +51 -6
  42. data/lib/review/idgxmlmaker.rb +9 -14
  43. data/lib/review/index_builder.rb +653 -0
  44. data/lib/review/init.rb +5 -13
  45. data/lib/review/latexbuilder.rb +65 -4
  46. data/lib/review/logger.rb +2 -2
  47. data/lib/review/makerhelper.rb +11 -0
  48. data/lib/review/markdownbuilder.rb +19 -1
  49. data/lib/review/pdfmaker.rb +17 -36
  50. data/lib/review/plaintextbuilder.rb +48 -2
  51. data/lib/review/preprocessor.rb +5 -5
  52. data/lib/review/rstbuilder.rb +25 -6
  53. data/lib/review/sec_counter.rb +13 -0
  54. data/lib/review/textmaker.rb +4 -12
  55. data/lib/review/tocprinter.rb +2 -3
  56. data/lib/review/topbuilder.rb +26 -0
  57. data/lib/review/update.rb +7 -7
  58. data/lib/review/version.rb +1 -1
  59. data/lib/review/volumeprinter.rb +2 -3
  60. data/lib/review/webmaker.rb +9 -20
  61. data/review.gemspec +2 -2
  62. data/samples/sample-book/src/config.yml +1 -1
  63. data/samples/syntax-book/Gemfile +1 -1
  64. data/samples/syntax-book/config.yml +1 -1
  65. data/templates/latex/config.erb +27 -23
  66. data/templates/latex/review-jlreq/README.md +3 -1
  67. data/templates/latex/review-jlreq/review-base.sty +31 -15
  68. data/templates/latex/review-jlreq/review-jlreq.cls +8 -24
  69. data/templates/latex/review-jsbook/README.md +7 -5
  70. data/templates/latex/review-jsbook/review-base.sty +34 -16
  71. data/templates/latex/review-jsbook/review-jsbook.cls +4 -2
  72. data/templates/web/html/layout-html5.html.erb +1 -1
  73. data/test/assets/test_template.tex +3 -3
  74. data/test/assets/test_template_backmatter.tex +3 -3
  75. data/test/book_test_helper.rb +11 -5
  76. data/test/test_book.rb +54 -63
  77. data/test/test_book_chapter.rb +93 -52
  78. data/test/test_builder.rb +24 -15
  79. data/test/test_converter.rb +1 -0
  80. data/test/test_epub3maker.rb +2 -2
  81. data/test/test_epubmaker.rb +8 -0
  82. data/test/test_helper.rb +4 -1
  83. data/test/test_htmlbuilder.rb +627 -56
  84. data/test/test_htmlutils.rb +0 -12
  85. data/test/test_i18n.rb +33 -33
  86. data/test/test_idgxmlbuilder.rb +358 -11
  87. data/test/test_idgxmlmaker_cmd.rb +1 -1
  88. data/test/test_index.rb +62 -52
  89. data/test/test_indexbuilder.rb +52 -0
  90. data/test/test_latexbuilder.rb +547 -10
  91. data/test/test_latexbuilder_v2.rb +43 -5
  92. data/test/test_logger.rb +7 -7
  93. data/test/test_makerhelper.rb +0 -12
  94. data/test/test_markdownbuilder.rb +3 -0
  95. data/test/test_pdfmaker.rb +13 -12
  96. data/test/test_pdfmaker_cmd.rb +1 -1
  97. data/test/test_plaintextbuilder.rb +422 -7
  98. data/test/test_review_ext.rb +2 -1
  99. data/test/test_rstbuilder.rb +25 -1
  100. data/test/test_sec_counter.rb +156 -0
  101. data/test/test_textmaker_cmd.rb +1 -1
  102. data/test/test_topbuilder.rb +187 -10
  103. data/test/test_update.rb +10 -10
  104. data/test/test_webtocprinter.rb +12 -12
  105. data/vendor/gentombow/LICENSE +1 -1
  106. data/vendor/gentombow/Makefile +0 -1
  107. data/vendor/gentombow/bounddvi-en.pdf +0 -0
  108. data/vendor/gentombow/bounddvi-en.tex +1 -0
  109. data/vendor/gentombow/bounddvi.pdf +0 -0
  110. data/vendor/gentombow/bounddvi.sty +30 -7
  111. data/vendor/gentombow/bounddvi.tex +1 -0
  112. data/vendor/gentombow/create_archive.sh +1 -0
  113. data/vendor/gentombow/gentombow-ja.pdf +0 -0
  114. data/vendor/gentombow/gentombow-ja.tex +9 -0
  115. data/vendor/gentombow/gentombow.pdf +0 -0
  116. data/vendor/gentombow/gentombow.sty +32 -10
  117. data/vendor/gentombow/gentombow.tex +8 -0
  118. data/vendor/gentombow/tests/gentombow-01-pdfx.tex +8 -0
  119. data/vendor/gentombow/tests/gentombow-02-pdfx.tex +8 -0
  120. data/vendor/jsclasses/Makefile +3 -2
  121. data/vendor/jsclasses/create_archive.sh +5 -5
  122. data/vendor/jsclasses/jis/Makefile +3 -2
  123. data/vendor/jsclasses/jis/jsarticle.cls +22 -18
  124. data/vendor/jsclasses/jis/jsbook.cls +22 -18
  125. data/vendor/jsclasses/jis/jsclasses.dtx +94 -13
  126. data/vendor/jsclasses/jis/jsclasses.ins +15 -5
  127. data/vendor/jsclasses/jis/jslogo.ins +9 -0
  128. data/vendor/jsclasses/jis/jslogo.sty +1 -13
  129. data/vendor/jsclasses/jis/jspf.cls +22 -18
  130. data/vendor/jsclasses/jis/jsreport.cls +22 -18
  131. data/vendor/jsclasses/jis/jsverb.ins +9 -0
  132. data/vendor/jsclasses/jis/jsverb.sty +1 -13
  133. data/vendor/jsclasses/jis/kiyou.cls +22 -18
  134. data/vendor/jsclasses/jis/minijs.sty +65 -22
  135. data/vendor/jsclasses/jis/okumacro.ins +9 -0
  136. data/vendor/jsclasses/jis/okumacro.sty +1 -13
  137. data/vendor/jsclasses/jis/okuverb.ins +9 -0
  138. data/vendor/jsclasses/jis/okuverb.sty +1 -13
  139. data/vendor/jsclasses/jis/winjis.sty +23 -19
  140. data/vendor/jsclasses/jsarticle.cls +22 -18
  141. data/vendor/jsclasses/jsbook.cls +22 -18
  142. data/vendor/jsclasses/jsclasses.dtx +94 -13
  143. data/vendor/jsclasses/jsclasses.ins +15 -5
  144. data/vendor/jsclasses/jsclasses.pdf +0 -0
  145. data/vendor/jsclasses/jslogo.ins +9 -0
  146. data/vendor/jsclasses/jslogo.pdf +0 -0
  147. data/vendor/jsclasses/jslogo.sty +1 -13
  148. data/vendor/jsclasses/jspf.cls +22 -18
  149. data/vendor/jsclasses/jsreport.cls +22 -18
  150. data/vendor/jsclasses/jsverb.ins +9 -0
  151. data/vendor/jsclasses/jsverb.pdf +0 -0
  152. data/vendor/jsclasses/jsverb.sty +1 -13
  153. data/vendor/jsclasses/kiyou.cls +22 -18
  154. data/vendor/jsclasses/minijs.sty +68 -22
  155. data/vendor/jsclasses/okumacro.ins +9 -0
  156. data/vendor/jsclasses/okumacro.pdf +0 -0
  157. data/vendor/jsclasses/okumacro.sty +1 -13
  158. data/vendor/jsclasses/okuverb.ins +9 -0
  159. data/vendor/jsclasses/okuverb.pdf +0 -0
  160. data/vendor/jsclasses/okuverb.sty +1 -13
  161. data/vendor/jsclasses/tests/relfont.tex +10 -0
  162. data/vendor/jsclasses/winjis.sty +23 -19
  163. metadata +14 -6
  164. data/.rubocop_todo.yml +0 -7
  165. data/lib/review/book/compilable.rb +0 -174
@@ -195,7 +195,7 @@ module ReVIEW
195
195
  op = m[1]
196
196
  args = m[2].split(/,\s*/)
197
197
  opts = parse_optargs(m[3])
198
- return if argc == 0 and args.empty?
198
+ return if (argc == 0) && args.empty?
199
199
  if argc == -1
200
200
  # Any number of arguments are allowed.
201
201
  elsif args.size != argc
@@ -284,7 +284,7 @@ module ReVIEW
284
284
  err = stderr.readlines
285
285
  end
286
286
  end
287
- if err and !err.empty?
287
+ if err && !err.empty?
288
288
  $stderr.puts '[unexpected stderr message]'
289
289
  err.each { |line| $stderr.print line }
290
290
  error 'get_output: got unexpected output'
@@ -355,14 +355,14 @@ module ReVIEW
355
355
 
356
356
  def parse_git_blob(g_obj)
357
357
  IO.popen('git show ' + g_obj.sub(/\Agit\|/, ''), 'r') do |f|
358
- init_errorutils f
358
+ init_errorutils(f)
359
359
  return _parse_file(f)
360
360
  end
361
361
  end
362
362
 
363
363
  def parse_file(fname)
364
364
  File.open(fname, 'rt:BOM|utf-8') do |f|
365
- init_errorutils f
365
+ init_errorutils(f)
366
366
  return _parse_file(f)
367
367
  end
368
368
  end
@@ -426,7 +426,7 @@ module ReVIEW
426
426
  curr.each_value { |list| list.push(Line.new(nil, line)) }
427
427
 
428
428
  else
429
- next if yacchack and line.strip == ';'
429
+ next if yacchack && (line.strip == ';')
430
430
  line = canonical(line)
431
431
  curr.each_value { |list| list.push(Line.new(lineno, line)) }
432
432
  lineno += 1
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2008-2019 Minero Aoki, Kenshi Muto
1
+ # Copyright (c) 2008-2020 Minero Aoki, Kenshi Muto
2
2
  # 2002-2006 Minero Aoki
3
3
  #
4
4
  # This program is free software.
@@ -86,7 +86,7 @@ module ReVIEW
86
86
  private :blank
87
87
 
88
88
  def result
89
- @output.string
89
+ solve_nest(@output.string)
90
90
  end
91
91
 
92
92
  def headline(level, label, caption)
@@ -97,7 +97,7 @@ module ReVIEW
97
97
  end
98
98
  p = '='
99
99
  case level
100
- when 1 then
100
+ when 1
101
101
  unless label
102
102
  puts ".. _#{@chapter.name}:"
103
103
  blank
@@ -373,8 +373,9 @@ module ReVIEW
373
373
 
374
374
  def compile_kw(word, alt)
375
375
  if alt
376
- then " **#{word}(#{alt.strip})** "
377
- else " **#{word}** "
376
+ " **#{word}(#{alt.strip})** "
377
+ else
378
+ " **#{word}** "
378
379
  end
379
380
  end
380
381
 
@@ -582,6 +583,24 @@ module ReVIEW
582
583
  base_parablock('centering', lines, nil)
583
584
  end
584
585
 
586
+ CAPTION_TITLES.each do |name|
587
+ class_eval %Q(
588
+ def #{name}_begin(caption = nil)
589
+ check_nested_minicolumn
590
+ @doc_status[:minicolumn] = '#{name}'
591
+ puts ".. #{name}::"
592
+ blank
593
+ puts " " + compile_inline(caption).to_s unless caption.nil?
594
+ print " "
595
+ end
596
+
597
+ def #{name}_end
598
+ blank
599
+ @doc_status[:minicolumn] = nil
600
+ end
601
+ ), __FILE__, __LINE__ - 14
602
+ end
603
+
585
604
  def note(lines, caption = nil)
586
605
  base_parablock('note', lines, caption)
587
606
  end
@@ -705,7 +724,7 @@ module ReVIEW
705
724
  str
706
725
  end
707
726
 
708
- def inline_chap(id)
727
+ def inline_chap(id) # rubocop:disable Lint/UselessMethodDefinition
709
728
  super
710
729
  end
711
730
 
@@ -37,6 +37,19 @@ module ReVIEW
37
37
  str
38
38
  end
39
39
 
40
+ def number_list
41
+ buf = @counter.dup
42
+ while buf.present?
43
+ if buf.last == 0
44
+ buf.pop
45
+ else
46
+ return buf
47
+ end
48
+ end
49
+
50
+ buf
51
+ end
52
+
40
53
  def prefix(level, secnolevel)
41
54
  return nil if @chapter.number.blank?
42
55
 
@@ -75,20 +75,13 @@ module ReVIEW
75
75
  end
76
76
 
77
77
  def execute(*args)
78
- @config = ReVIEW::Configure.values
79
- @config.maker = 'textmaker'
80
78
  cmd_config, yamlfile = parse_opts(args)
81
79
  error "#{yamlfile} not found." unless File.exist?(yamlfile)
82
80
 
83
- begin
84
- loader = ReVIEW::YAMLLoader.new
85
- @config.deep_merge!(loader.load_file(yamlfile))
86
- rescue => e
87
- error "yaml error #{e.message}"
88
- end
81
+ @config = ReVIEW::Configure.create(maker: 'textmaker',
82
+ yamlfile: yamlfile,
83
+ config: cmd_config)
89
84
 
90
- # YAML configs will be overridden by command line options.
91
- @config.deep_merge!(cmd_config)
92
85
  I18n.setup(@config['language'])
93
86
  begin
94
87
  generate_text_files(yamlfile)
@@ -109,8 +102,7 @@ module ReVIEW
109
102
  remove_old_files(@path)
110
103
  Dir.mkdir(@path)
111
104
 
112
- @book = ReVIEW::Book.load(@basedir)
113
- @book.config = @config
105
+ @book = ReVIEW::Book::Base.new(@basedir, config: @config)
114
106
 
115
107
  build_body(@path, yamlfile)
116
108
  end
@@ -50,7 +50,7 @@ module ReVIEW
50
50
  @logger = ReVIEW.logger
51
51
  @config = ReVIEW::Configure.values
52
52
  @yamlfile = 'config.yml'
53
- @book = ReVIEW::Book::Base.load
53
+ @book = ReVIEW::Book::Base.new('.', config: @config)
54
54
  @upper = 4
55
55
  @indent = true
56
56
  @buildonly = nil
@@ -59,7 +59,6 @@ module ReVIEW
59
59
 
60
60
  def execute(*args)
61
61
  parse_options(args)
62
- @book.config = ReVIEW::Configure.values
63
62
  unless File.readable?(@yamlfile)
64
63
  @logger.error("No such fiile or can't open #{@yamlfile}.")
65
64
  exit 1
@@ -108,7 +107,7 @@ module ReVIEW
108
107
  result_array.push({ part: 'end' })
109
108
  end
110
109
  end
111
- rescue ReVIEW::FileNotFound => e
110
+ rescue ReVIEW::FileNotFound, ReVIEW::CompileError => e
112
111
  @logger.error e
113
112
  exit 1
114
113
  end
@@ -444,6 +444,32 @@ module ReVIEW
444
444
  blank
445
445
  end
446
446
 
447
+ def common_block_begin(type, _level, _label, caption = nil)
448
+ blank
449
+ puts "◆→開始:#{@titles[type]}←◆"
450
+ puts '■' + compile_inline(caption) if caption.present?
451
+ end
452
+
453
+ def common_block_end(type, _level)
454
+ puts "◆→終了:#{@titles[type]}←◆"
455
+ blank
456
+ end
457
+
458
+ CAPTION_TITLES.each do |name|
459
+ class_eval %Q(
460
+ def #{name}_begin(caption = nil)
461
+ check_nested_minicolumn
462
+ @doc_status[:minicolumn] = '#{name}'
463
+ common_block_begin('#{name}', nil, nil, caption)
464
+ end
465
+
466
+ def #{name}_end
467
+ common_block_end('#{name}', nil)
468
+ @doc_status[:minicolumn] = nil
469
+ end
470
+ ), __FILE__, __LINE__ - 11
471
+ end
472
+
447
473
  def indepimage(_lines, id, caption = nil, metric = nil)
448
474
  metrics = parse_metric('top', metric)
449
475
  metrics = " #{metrics}" if metrics.present?
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright (c) 2018-2019 Kenshi Muto
2
+ # Copyright (c) 2018-2020 Kenshi Muto
3
3
  #
4
4
  # This program is free software.
5
5
  # You can distribute or modify this program under the terms of
@@ -20,7 +20,7 @@ module ReVIEW
20
20
  end
21
21
 
22
22
  # should be
23
- TARGET_VERSION = '4.0'
23
+ TARGET_VERSION = '5.0'
24
24
  EPUB_VERSION = '3'
25
25
  HTML_VERSION = '5'
26
26
  TEX_DOCUMENTCLASS = ['review-jsbook', 'review-jlreq']
@@ -239,7 +239,7 @@ module ReVIEW
239
239
  def update_version
240
240
  @config_ymls.each do |yml|
241
241
  config = YAML.load_file(yml)
242
- if config['review_version'].to_f == TARGET_VERSION.to_f
242
+ if config['review_version'].to_f.round(1) == TARGET_VERSION.to_f.round(1)
243
243
  next
244
244
  end
245
245
 
@@ -513,11 +513,11 @@ module ReVIEW
513
513
  def update_tex_command
514
514
  @tex_ymls.each do |yml|
515
515
  config = YAML.load_file(yml)
516
- if !config['texcommand'] || config['texcommand'] !~ /\s+\-/
516
+ if !config['texcommand'] || config['texcommand'] !~ /\s+-/
517
517
  next
518
518
  end
519
519
  # option should be moved to texoptions
520
- cmd, opts = config['texcommand'].split(/\s+\-/, 2)
520
+ cmd, opts = config['texcommand'].split(/\s+-/, 2)
521
521
  opts = "-#{opts}"
522
522
 
523
523
  unless confirm("%s: 'texcommand' has options ('%s'). Move it to 'texoptions'?", [File.basename(yml), opts])
@@ -537,12 +537,12 @@ module ReVIEW
537
537
  def update_dvi_command
538
538
  @tex_ymls.each do |yml|
539
539
  config = YAML.load_file(yml)
540
- if !config['dvicommand'] || config['dvicommand'] !~ /\s+\-/
540
+ if !config['dvicommand'] || config['dvicommand'] !~ /\s+-/
541
541
  next
542
542
  end
543
543
 
544
544
  # option should be moved to dvioptions
545
- cmd, opts = config['dvicommand'].split(/\s+\-/, 2)
545
+ cmd, opts = config['dvicommand'].split(/\s+-/, 2)
546
546
  opts = "-#{opts}"
547
547
 
548
548
  unless confirm("%s: 'dvicommand' has options ('%s'). Move it to 'dvioptions'?", [File.basename(yml), opts])
@@ -1,3 +1,3 @@
1
1
  module ReVIEW
2
- VERSION = '4.2.0'.freeze
2
+ VERSION = '5.0.0'.freeze
3
3
  end
@@ -28,8 +28,7 @@ module ReVIEW
28
28
 
29
29
  def execute(*args)
30
30
  parse_options(args)
31
- @book = ReVIEW::Book::Base.load
32
- @book.config = @config
31
+ @book = ReVIEW::Book::Base.new('.', config: @config)
33
32
  unless File.readable?(@yamlfile)
34
33
  @logger.error("No such fiile or can't open #{@yamlfile}.")
35
34
  exit 1
@@ -46,7 +45,7 @@ module ReVIEW
46
45
  print_chapter_volume(chap)
47
46
  end
48
47
  end
49
- rescue ReVIEW::FileNotFound => e
48
+ rescue ReVIEW::FileNotFound, ReVIEW::CompileError => e
50
49
  @logger.error e
51
50
  exit 1
52
51
  end
@@ -19,7 +19,6 @@ require 'review/yamlloader'
19
19
  require 'review/template'
20
20
  require 'review/tocprinter'
21
21
  require 'review/version'
22
- require 'erb'
23
22
  require 'review/makerhelper'
24
23
 
25
24
  module ReVIEW
@@ -80,19 +79,13 @@ module ReVIEW
80
79
  end
81
80
 
82
81
  def execute(*args)
83
- @config = ReVIEW::Configure.values
84
- @config.maker = 'webmaker'
85
82
  cmd_config, yamlfile = parse_opts(args)
86
83
  error "#{yamlfile} not found." unless File.exist?(yamlfile)
87
84
 
88
- begin
89
- loader = ReVIEW::YAMLLoader.new
90
- @config.deep_merge!(loader.load_file(yamlfile))
91
- rescue => e
92
- error "yaml error #{e.message}"
93
- end
94
- # YAML configs will be overridden by command line options.
95
- @config.deep_merge!(cmd_config)
85
+ @config = ReVIEW::Configure.create(maker: 'webmaker',
86
+ yamlfile: yamlfile,
87
+ config: cmd_config)
88
+
96
89
  @config['htmlext'] = 'html'
97
90
  I18n.setup(@config['language'])
98
91
  begin
@@ -109,8 +102,7 @@ module ReVIEW
109
102
  remove_old_files(@path)
110
103
  Dir.mkdir(@path)
111
104
 
112
- @book = ReVIEW::Book.load(@basedir)
113
- @book.config = @config
105
+ @book = ReVIEW::Book::Base.new(@basedir, config: @config)
114
106
 
115
107
  copy_stylesheet(@path)
116
108
  copy_frontmatter(@path)
@@ -129,12 +121,6 @@ module ReVIEW
129
121
  copy_resources(@config['fontdir'], "#{@path}/fonts", @config['font_ext'])
130
122
  end
131
123
 
132
- def clean_mathdir
133
- if @config['imgmath'] && File.exist?("#{@config['imagedir']}/_review_math")
134
- FileUtils.rm_rf("#{@config['imagedir']}/_review_math")
135
- end
136
- end
137
-
138
124
  def build_body(basetmpdir, _yamlfile)
139
125
  base_path = Pathname.new(@basedir)
140
126
  builder = ReVIEW::HTMLBuilder.new
@@ -156,6 +142,7 @@ module ReVIEW
156
142
  end
157
143
 
158
144
  def build_part(part, basetmpdir, htmlfile)
145
+ @title = h("#{ReVIEW::I18n.t('part', part.number)} #{part.name.strip}")
159
146
  File.open("#{basetmpdir}/#{htmlfile}", 'w') do |f|
160
147
  @body = ''
161
148
  @body << %Q(<div class="part">\n)
@@ -259,6 +246,7 @@ module ReVIEW
259
246
  end
260
247
 
261
248
  def build_indexpage(basetmpdir)
249
+ @title = h('index')
262
250
  File.open("#{basetmpdir}/index.html", 'w') do |f|
263
251
  if @config['coverimage']
264
252
  file = File.join(@config['imagedir'], @config['coverimage'])
@@ -281,10 +269,11 @@ module ReVIEW
281
269
  end
282
270
 
283
271
  def build_titlepage(basetmpdir, htmlfile)
272
+ @title = h('titlepage')
284
273
  File.open("#{basetmpdir}/#{htmlfile}", 'w') do |f|
285
274
  @body = ''
286
275
  @body << %Q(<div class="titlepage">)
287
- @body << %Q(<h1 class="tp-title">#{CGI.escapeHTML(@config.name_of('booktitle'))}</h1>)
276
+ @body << %Q(<h1 class="tp-title">#{h(@config.name_of('booktitle'))}</h1>)
288
277
  if @config['aut']
289
278
  @body << %Q(<h2 class="tp-author">#{join_with_separator(@config.names_of('aut'), ReVIEW::I18n.t('names_splitter'))}</h2>)
290
279
  end
@@ -12,7 +12,7 @@ Gem::Specification.new do |gem|
12
12
  gem.summary = 'Re:VIEW: a easy-to-use digital publishing system'
13
13
  gem.description = 'Re:VIEW is a digital publishing system for books and ebooks. It supports InDesign, EPUB and LaTeX.'
14
14
  gem.required_rubygems_version = Gem::Requirement.new('>= 0') if gem.respond_to?(:required_rubygems_version=)
15
- gem.date = '2020-06-29'
15
+ gem.date = '2020-10-29'
16
16
 
17
17
  gem.files = `git ls-files`.split("\n")
18
18
  gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
@@ -25,7 +25,7 @@ Gem::Specification.new do |gem|
25
25
  gem.add_dependency('rubyzip')
26
26
  gem.add_development_dependency('pygments.rb')
27
27
  gem.add_development_dependency('rake')
28
- gem.add_development_dependency('rubocop', '~> 0.77.0')
28
+ gem.add_development_dependency('rubocop', '~> 0.92.0')
29
29
  gem.add_development_dependency('rubocop-performance')
30
30
  gem.add_development_dependency('simplecov')
31
31
  gem.add_development_dependency('test-unit')
@@ -1,5 +1,5 @@
1
1
  ## config.yml for sample book
2
- review_version: 4.0
2
+ review_version: 5.0
3
3
  bookname: book
4
4
  language: ja
5
5
  booktitle: Re:VIEWサンプル書籍
@@ -1,4 +1,4 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
3
  gem 'rake'
4
- gem 'review', '2.3.0'
4
+ gem 'review', '4.2.0'
@@ -1,4 +1,4 @@
1
- review_version: 4.0
1
+ review_version: 5.0
2
2
  bookname: syntax-book
3
3
  language: ja
4
4
  booktitle: {name: "Re:VIEW文法使用例", file-as: "リビューブンポウシヨウレイ"}
@@ -1,50 +1,51 @@
1
+ <%- initialize_metachars(@config['texcommand']) -%>
1
2
  \makeatletter
2
3
  \def\review@reviewversion{<%= ReVIEW::VERSION %>}
3
4
  \def\review@texcompiler{<%= @texcompiler %>}
4
5
  \def\review@documentclass{<%= @documentclass %>}
5
6
 
6
7
  <%- %w(booktitle subtitle).each do |item| -%>
7
- <%- if @config[item] -%>\def\review@<%= item %>name{<%= escape_latex(@config.name_of(item)) %>}
8
+ <%- if @config[item] -%>\def\review@<%= item %>name{<%= escape(@config.name_of(item)) %>}
8
9
  <%- end -%>
9
10
  <%- end -%>
10
11
 
11
- <%- %w(aut adp ann arr art asn aqt aft aui ant bkp clb cmm csl dsr edt ill lyr mdc mus nrt oth pht pbl prt red rev spn ths trc trl).each do |item| %><%- if @config[item] -%>\def\review@<%= item %>names{<%= escape_latex(@config.names_of(item).join(I18n.t('names_splitter'))) %>}
12
+ <%- %w(aut adp ann arr art asn aqt aft aui ant bkp clb cmm csl dsr edt ill lyr mdc mus nrt oth pht pbl prt red rev spn ths trc trl).each do |item| %><%- if @config[item] -%>\def\review@<%= item %>names{<%= escape(@config.names_of(item).join(I18n.t('names_splitter'))) %>}
12
13
  <%- end -%>
13
14
  <%- end -%>
14
15
 
15
16
  \def\review@titlepageauthors{<%= @authors %>}
16
- \def\review@date{<%= escape_latex(@config['date'].to_s) %>}
17
+ \def\review@date{<%= escape(@config['date'].to_s) %>}
17
18
 
18
- <%- %w(bookname language urnid isbn).each do |item| -%><%- if @config[item] -%>\def\review@<%= item %>{<%= escape_latex(@config[item]) %>}
19
+ <%- %w(bookname language urnid isbn).each do |item| -%><%- if @config[item] -%>\def\review@<%= item %>{<%= escape(@config[item]) %>}
19
20
  <%- end -%>
20
21
  <%- end -%>
21
22
  <%- %w(rights description subject type format source relation coverage).each do |item| -%>
22
23
  <%- if @config[item] -%>
23
- <%- a = [@config[item]].flatten -%>\def\review@<%= item %>{<%= a.map{|s| escape_latex(s)}.join('\\' + '\\') %>}
24
+ <%- a = [@config[item]].flatten -%>\def\review@<%= item %>{<%= a.map{|s| escape(s)}.join('\\' + '\\') %>}
24
25
  <%- end -%>
25
26
  <%- end -%>
26
27
 
27
28
  <%- if @config['highlight'] && @config['highlight']['latex'] -%>\def\review@highlightlatex{<%= @config['highlight']['latex'] %>}
28
29
  <%- end -%>
29
30
 
30
- \def\review@intn@list{<%= escape_latex(I18n.t('list')) %>}
31
- \def\review@intn@columnhead{<%= escape_latex(I18n.t('column_head')) %>}
32
- \def\review@intn@image{<%= escape_latex(I18n.t('image')) %>}
33
- \def\review@intn@table{<%= escape_latex(I18n.t('table')) %>}
34
- \def\review@intn@equation{<%= escape_latex(I18n.t('equation')) %>}
35
- \def\review@intn@columnname{<%= escape_latex(I18n.t('columnname')) %>}
36
- \def\review@intn@memohead{<%= escape_latex(I18n.t('memo_head')) %>}
37
- \def\review@intn@edition{<%= escape_latex(I18n.t('edition')) %>}
38
- \def\review@intn@publishedby{<%= escape_latex(I18n.t('published_by', @config.names_of('pbl').join(I18n.t('names_splitter'))))%>}
39
- \def\review@intn@captionprefix{<%= escape_latex(I18n.t('caption_prefix')) %>}
40
- \def\review@toctitle{<%= escape_latex(@config['toctitle'].present? ? @config['toctitle'] : I18n.t('toctitle')) %>}
41
- \def\review@prepartname{<%= escape_latex(@locale_latex['prepartname']) %>}
42
- \def\review@postpartname{<%= escape_latex(@locale_latex['postpartname']) %>}
43
- \def\review@prechaptername{<%= escape_latex(@locale_latex['prechaptername']) %>}
44
- \def\review@postchaptername{<%= escape_latex(@locale_latex['postchaptername']) %>}
45
- \def\review@figurename{<%= escape_latex(I18n.t('image')) %>}
46
- \def\review@tablename{<%= escape_latex(I18n.t('table')) %>}
47
- \def\review@appendixname{<%= escape_latex(@locale_latex['preappendixname']) %>}
31
+ \def\review@intn@list{<%= escape(I18n.t('list')) %>}
32
+ \def\review@intn@columnhead{<%= escape(I18n.t('column_head')) %>}
33
+ \def\review@intn@image{<%= escape(I18n.t('image')) %>}
34
+ \def\review@intn@table{<%= escape(I18n.t('table')) %>}
35
+ \def\review@intn@equation{<%= escape(I18n.t('equation')) %>}
36
+ \def\review@intn@columnname{<%= escape(I18n.t('columnname')) %>}
37
+ \def\review@intn@memohead{<%= escape(I18n.t('memo_head')) %>}
38
+ \def\review@intn@edition{<%= escape(I18n.t('edition')) %>}
39
+ \def\review@intn@publishedby{<%= escape(I18n.t('published_by', @config.names_of('pbl').join(I18n.t('names_splitter'))))%>}
40
+ \def\review@intn@captionprefix{<%= escape(I18n.t('caption_prefix')) %>}
41
+ \def\review@toctitle{<%= escape(@config['toctitle'].present? ? @config['toctitle'] : I18n.t('toctitle')) %>}
42
+ \def\review@prepartname{<%= escape(@locale_latex['prepartname']) %>}
43
+ \def\review@postpartname{<%= escape(@locale_latex['postpartname']) %>}
44
+ \def\review@prechaptername{<%= escape(@locale_latex['prechaptername']) %>}
45
+ \def\review@postchaptername{<%= escape(@locale_latex['postchaptername']) %>}
46
+ \def\review@figurename{<%= escape(I18n.t('image')) %>}
47
+ \def\review@tablename{<%= escape(I18n.t('table')) %>}
48
+ \def\review@appendixname{<%= escape(@locale_latex['preappendixname']) %>}
48
49
 
49
50
  <%- if @config['toc'] -%>
50
51
  \def\review@toc{true}
@@ -100,6 +101,9 @@
100
101
  <%- if @config['use_part'] -%>
101
102
  \def\reviewusepart{true}
102
103
  <%- end -%>
104
+ <%- if @config['pdfmaker']['bbox'] -%>
105
+ \def\review@bbox{<%= @config['pdfmaker']['bbox'] %>}
106
+ <%- end -%>
103
107
 
104
108
  \def\reviewbackcompatibilityhook{
105
109
  \ifdefined\reviewimagecaption\else% for 3.0.0 compatibility