review 5.3.0 → 5.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (79) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby-tex.yml +1 -1
  3. data/.github/workflows/ruby.yml +1 -1
  4. data/.rubocop.yml +1 -322
  5. data/NEWS.ja.md +48 -0
  6. data/NEWS.md +48 -0
  7. data/README.md +9 -8
  8. data/bin/review +1 -1
  9. data/bin/review-catalog-converter +15 -15
  10. data/bin/review-check +7 -7
  11. data/bin/review-compile +6 -8
  12. data/bin/review-index +1 -1
  13. data/bin/review-preproc +1 -1
  14. data/bin/review-validate +2 -2
  15. data/doc/config.yml.sample +7 -1
  16. data/doc/config.yml.sample-simple +1 -1
  17. data/lib/review/book/base.rb +3 -3
  18. data/lib/review/book/book_unit.rb +1 -1
  19. data/lib/review/book/chapter.rb +1 -1
  20. data/lib/review/book/index.rb +3 -3
  21. data/lib/review/book/part.rb +12 -13
  22. data/lib/review/book/volume.rb +1 -1
  23. data/lib/review/builder.rb +10 -12
  24. data/lib/review/catalog.rb +5 -5
  25. data/lib/review/compiler.rb +13 -13
  26. data/lib/review/configure.rb +5 -2
  27. data/lib/review/epub2html.rb +12 -12
  28. data/lib/review/epubmaker/content.rb +1 -1
  29. data/lib/review/epubmaker/epubcommon.rb +44 -42
  30. data/lib/review/epubmaker/epubv2.rb +2 -1
  31. data/lib/review/epubmaker/epubv3.rb +5 -4
  32. data/lib/review/epubmaker/producer.rb +3 -3
  33. data/lib/review/epubmaker/reviewheaderlistener.rb +1 -1
  34. data/lib/review/epubmaker.rb +32 -31
  35. data/lib/review/extentions/string.rb +1 -1
  36. data/lib/review/htmlbuilder.rb +16 -15
  37. data/lib/review/htmlutils.rb +17 -17
  38. data/lib/review/i18n.rb +3 -3
  39. data/lib/review/idgxmlbuilder.rb +22 -21
  40. data/lib/review/idgxmlmaker.rb +15 -13
  41. data/lib/review/index_builder.rb +4 -20
  42. data/lib/review/init.rb +4 -4
  43. data/lib/review/latexbuilder.rb +30 -32
  44. data/lib/review/lineinput.rb +3 -3
  45. data/lib/review/location.rb +1 -1
  46. data/lib/review/logger.rb +21 -21
  47. data/lib/review/makerhelper.rb +3 -3
  48. data/lib/review/markdownbuilder.rb +6 -6
  49. data/lib/review/pdfmaker.rb +23 -19
  50. data/lib/review/plaintextbuilder.rb +5 -5
  51. data/lib/review/preprocessor/repository.rb +1 -1
  52. data/lib/review/preprocessor.rb +5 -5
  53. data/lib/review/textmaker.rb +20 -18
  54. data/lib/review/textutils.rb +3 -5
  55. data/lib/review/topbuilder.rb +71 -12
  56. data/lib/review/update.rb +16 -8
  57. data/lib/review/version.rb +1 -1
  58. data/lib/review/webmaker.rb +32 -32
  59. data/lib/review/webtocprinter.rb +10 -10
  60. data/lib/review/yamlloader.rb +35 -2
  61. data/review.gemspec +1 -0
  62. data/samples/sample-book/src/config.yml +0 -1
  63. data/templates/html/_titlepage.html.erb +9 -17
  64. data/templates/opf/opf_manifest_epubv2.opf.erb +1 -1
  65. data/templates/opf/opf_manifest_epubv3.opf.erb +1 -1
  66. data/test/book_test_helper.rb +10 -10
  67. data/test/test_epub3maker.rb +3 -3
  68. data/test/test_epubmaker.rb +14 -29
  69. data/test/test_epubmaker_cmd.rb +2 -2
  70. data/test/test_htmlbuilder.rb +4 -5
  71. data/test/test_idgxmlbuilder.rb +10 -10
  72. data/test/test_idgxmlmaker_cmd.rb +1 -1
  73. data/test/test_img_math.rb +11 -2
  74. data/test/test_latexbuilder.rb +2 -3
  75. data/test/test_pdfmaker_cmd.rb +10 -10
  76. data/test/test_textmaker_cmd.rb +1 -1
  77. data/test/test_topbuilder.rb +151 -11
  78. data/test/test_yamlloader.rb +28 -42
  79. metadata +8 -7
@@ -55,21 +55,21 @@ def main
55
55
  end
56
56
  # chaps and parts
57
57
  if File.exist?("#{dir}/CHAPS")
58
- if File.exist?("#{dir}/PART")
59
- catalog << parse_parts(File.read("#{dir}/PART"),
58
+ catalog << if File.exist?("#{dir}/PART")
59
+ parse_parts(File.read("#{dir}/PART"),
60
60
  File.read("#{dir}/CHAPS"))
61
- else
62
- catalog << parse_chaps(File.read("#{dir}/CHAPS"))
63
- end
61
+ else
62
+ parse_chaps(File.read("#{dir}/CHAPS"))
63
+ end
64
64
  end
65
65
  # postdef
66
66
  if File.exist?("#{dir}/POSTDEF")
67
67
  postdef = File.read("#{dir}/POSTDEF")
68
- if ask_yes?('Do you want to convert POSTDEF into APPENDIX? [y/n]')
69
- catalog << parse_postdef(postdef, true)
70
- else
71
- catalog << parse_postdef(postdef)
72
- end
68
+ catalog << if ask_yes?('Do you want to convert POSTDEF into APPENDIX? [y/n]')
69
+ parse_postdef(postdef, true)
70
+ else
71
+ parse_postdef(postdef)
72
+ end
73
73
  end
74
74
  end
75
75
  end
@@ -99,11 +99,11 @@ def parse_chaps(str)
99
99
  end
100
100
 
101
101
  def parse_postdef(str, to_appendix = false)
102
- if to_appendix
103
- header = "APPENDIX:\n"
104
- else
105
- header = "POSTDEF:\n"
106
- end
102
+ header = if to_appendix
103
+ "APPENDIX:\n"
104
+ else
105
+ "POSTDEF:\n"
106
+ end
107
107
  parse_internal(str, header) + "\n"
108
108
  end
109
109
 
data/bin/review-check CHANGED
@@ -18,7 +18,7 @@ include ReVIEW::TextUtils
18
18
 
19
19
  def sigmain
20
20
  Signal.trap(:INT) { exit 1 }
21
- if RUBY_PLATFORM !~ /mswin(?!ce)|mingw|cygwin|bccwin/
21
+ unless RUBY_PLATFORM.match?(/mswin(?!ce)|mingw|cygwin|bccwin/)
22
22
  Signal.trap(:PIPE, 'IGNORE')
23
23
  end
24
24
  main
@@ -95,7 +95,7 @@ end
95
95
  def find_line(lines, re)
96
96
  # single line?
97
97
  lines.each_with_index do |line, idx|
98
- if re =~ line
98
+ if re&.match?(line)
99
99
  return line.gsub(re, '<<<\&>>>'), idx
100
100
  end
101
101
  end
@@ -104,7 +104,7 @@ def find_line(lines, re)
104
104
  i = 0
105
105
  while i < lines.size - 1
106
106
  str = lines[i] + lines[i + 1]
107
- return str.gsub(re, '<<<\&>>>'), i if re =~ str
107
+ return str.gsub(re, '<<<\&>>>'), i if re&.match?(str)
108
108
 
109
109
  i += 1
110
110
  end
@@ -118,7 +118,7 @@ def words_re(rc)
118
118
  File.foreach(rc) do |line|
119
119
  next if line[0, 1] == '#'
120
120
 
121
- if / !/ =~ line
121
+ if / !/.match?(line)
122
122
  line, n = *line.split('!', 2)
123
123
  nega.push(n.strip)
124
124
  end
@@ -141,7 +141,7 @@ def each_paragraph(f)
141
141
  yield [$1], f.filename, f.lineno
142
142
  when %r<\A//\w.*\{\s*\z>
143
143
  while line = f.gets
144
- break if %r{//\}} === line
144
+ break if %r{//\}}.match?(line)
145
145
  end
146
146
  when /\A=/
147
147
  yield [line.slice(/\A=+(?:\[.*?\])?\s+(.*)/, 1).strip], f.lineno
@@ -150,8 +150,8 @@ def each_paragraph(f)
150
150
  lineno = f.lineno
151
151
  while line = f.gets
152
152
  break if line.strip.empty?
153
- break if %r{\A(?:=|//[\w\}])} =~ line
154
- next if /\A\#@/ =~ line
153
+ break if %r{\A(?:=|//[\w\}])}.match?(line)
154
+ next if /\A\#@/.match?(line)
155
155
 
156
156
  buf.push(line.strip)
157
157
  end
data/bin/review-compile CHANGED
@@ -22,7 +22,7 @@ DEFAULT_CONFIG_FILENAME = 'config.yml'.freeze
22
22
 
23
23
  def main
24
24
  Signal.trap(:INT) { exit 1 }
25
- if RUBY_PLATFORM !~ /mswin(?!ce)|mingw|cygwin|bccwin/
25
+ unless RUBY_PLATFORM.match?(/mswin(?!ce)|mingw|cygwin|bccwin/)
26
26
  Signal.trap(:PIPE, 'IGNORE')
27
27
  end
28
28
  _main
@@ -34,11 +34,9 @@ def _main
34
34
  @logger = ReVIEW.logger
35
35
  @mode = :files
36
36
  @basedir = nil
37
- if File.basename($PROGRAM_NAME).start_with?('review2')
38
- @target = File.basename($PROGRAM_NAME, '.rb').sub('review2', '')
39
- else
40
- @target = nil
41
- end
37
+ @target = if File.basename($PROGRAM_NAME).start_with?('review2')
38
+ File.basename($PROGRAM_NAME, '.rb').sub('review2', '')
39
+ end
42
40
  @check_only = false
43
41
  @output_filename = nil
44
42
 
@@ -52,13 +50,13 @@ def _main
52
50
  error! "#{@config['yaml']} not found." unless File.exist?(@config['yaml'])
53
51
  begin
54
52
  @config.deep_merge!(loader.load_file(@config['yaml']))
55
- rescue => e
53
+ rescue StandardError => e
56
54
  error! "yaml error #{e.message}"
57
55
  end
58
56
  elsif File.exist?(DEFAULT_CONFIG_FILENAME)
59
57
  begin
60
58
  @config.deep_merge!(loader.load_file(DEFAULT_CONFIG_FILENAME))
61
- rescue => e
59
+ rescue StandardError => e
62
60
  error! "yaml error #{e.message}"
63
61
  end
64
62
  end
data/bin/review-index CHANGED
@@ -15,7 +15,7 @@ require 'review/tocprinter'
15
15
 
16
16
  begin
17
17
  Signal.trap(:INT) { exit 1 }
18
- if RUBY_PLATFORM !~ /mswin(?!ce)|mingw|cygwin|bccwin/
18
+ unless RUBY_PLATFORM.match?(/mswin(?!ce)|mingw|cygwin|bccwin/)
19
19
  Signal.trap(:PIPE, 'IGNORE')
20
20
  end
21
21
 
data/bin/review-preproc CHANGED
@@ -26,7 +26,7 @@ include ReVIEW::Loggable
26
26
 
27
27
  def sigmain
28
28
  Signal.trap(:INT) { exit 1 }
29
- if RUBY_PLATFORM !~ /mswin(?!ce)|mingw|cygwin|bccwin/
29
+ unless RUBY_PLATFORM.match?(/mswin(?!ce)|mingw|cygwin|bccwin/)
30
30
  Signal.trap(:PIPE, 'IGNORE')
31
31
  end
32
32
  main
data/bin/review-validate CHANGED
@@ -41,7 +41,7 @@ ARGF.each do |line|
41
41
  unless %w[list emlist listnum emlistnum cmd image table].include?(block)
42
42
  @logger.warn "#{ln}: found '#{$1}' without the head space. Is it correct?"
43
43
  end
44
- elsif line =~ /\A\*\s+/
44
+ elsif /\A\*\s+/.match?(line)
45
45
  # itemize
46
46
  unless %w[list emlist listnum emlistnum cmd image table].include?(block)
47
47
  @logger.warn "#{ln}: found '*' without the head space. Is it correct?"
@@ -53,7 +53,7 @@ ARGF.each do |line|
53
53
  elsif block == 'table'
54
54
  next if line.start_with?('#@')
55
55
 
56
- if line !~ /\A-----/
56
+ unless line.start_with?('-----')
57
57
  # table
58
58
  colcount = line.split("\t").size
59
59
  if maxcolcount == 0
@@ -87,7 +87,7 @@ aut: ["青木峰郎", "武藤健志", "高橋征義", "角征典"]
87
87
  debug: null
88
88
 
89
89
  # 固有IDに使用するドメイン。指定しない場合には、時刻に基づくランダムUUIDが入る
90
- # urnid: urn:uuid:http://example.com/book-title/
90
+ # urnid: urn:uuid:ffffffff-ffff-ffff-ffff-ffffffffffff
91
91
  #
92
92
  # ISBN。省略した場合はurnidが入る
93
93
  # isbn: null
@@ -442,3 +442,9 @@ pdfmaker:
442
442
  # options_with_caption: "colbacktitle=black!25!white"
443
443
  #
444
444
  # pdfmaker:階層を使うものはここまで
445
+ # textmaker:
446
+ # 表見出しの表現の設定
447
+ # nullの場合は区切り線(------------)で見出し行と通常の行を分ける。
448
+ # trueの場合は見出しを★〜☆で囲み(太字と同様)、区切り線を入れない。
449
+ # th_bold: null
450
+ # textmaker:階層を使うものはここまで
@@ -25,7 +25,7 @@ date: 2018-11-11
25
25
  history: [["2012-01-30"],["2016-04-20","2016-05-03"],["2018-11-11"]]
26
26
  rights: (C) 2016-2020 Re:VIEW Commiters, some rights reserved.
27
27
  description: sample config.yml file for Re:VIEW book
28
- urnid: urn:uuid:http://reviewml.org/review-sample-book
28
+ # urnid: urn:uuid:ffffffff-ffff-ffff-ffff-ffffffffffff
29
29
  # isbn: null
30
30
 
31
31
  ## Book Structure
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright (c) 2009-2019 Minero Aoki, Kenshi Muto
2
+ # Copyright (c) 2009-2022 Minero Aoki, Kenshi Muto, Masayoshi Takahashi
3
3
  # 2002-2008 Minero Aoki
4
4
  #
5
5
  # This program is free software.
@@ -214,7 +214,7 @@ module ReVIEW
214
214
  end
215
215
 
216
216
  def load_config(filename)
217
- new_conf = YAML.load_file(filename)
217
+ new_conf = YAMLLoader.safe_load_file(filename)
218
218
  @config.merge!(new_conf)
219
219
  end
220
220
 
@@ -408,7 +408,7 @@ module ReVIEW
408
408
  end
409
409
 
410
410
  def filename_join(*args)
411
- File.join(args.reject(&:nil?))
411
+ File.join(args.compact)
412
412
  end
413
413
  end
414
414
  end
@@ -86,7 +86,7 @@ module ReVIEW
86
86
  return @title unless content
87
87
 
88
88
  content.each_line do |line|
89
- if line =~ /\A=+/
89
+ if /\A=+/.match?(line)
90
90
  @title = line.sub(/\A=+(\[.+?\])?(\{.+?\})?/, '').strip
91
91
  break
92
92
  end
@@ -42,7 +42,7 @@ module ReVIEW
42
42
  if @io
43
43
  begin
44
44
  @content = @io.read
45
- rescue
45
+ rescue StandardError
46
46
  @content = nil
47
47
  end
48
48
  else
@@ -45,7 +45,7 @@ module ReVIEW
45
45
 
46
46
  def [](id)
47
47
  @index.fetch(id)
48
- rescue
48
+ rescue StandardError
49
49
  index_keys = @index.keys.map { |i| i.split('|').last }.flatten # unfold all ids
50
50
  if index_keys.each_with_object(Hash.new(0)) { |i, h| h[i] += 1 }. # number of occurrences
51
51
  select { |k, v| k == id && v > 1 }.present? # detect duplicated
@@ -84,14 +84,14 @@ module ReVIEW
84
84
  begin
85
85
  chapter = chapter_item.content
86
86
  chapter.format_number
87
- rescue # part
87
+ rescue StandardError # part
88
88
  I18n.t('part', chapter.number)
89
89
  end
90
90
  end
91
91
 
92
92
  def title(id)
93
93
  @index.fetch(id).content.title
94
- rescue # non-file part
94
+ rescue StandardError # non-file part
95
95
  @index.fetch(id).content.name
96
96
  end
97
97
 
@@ -14,11 +14,11 @@ module ReVIEW
14
14
  def self.mkpart_from_namelistfile(book, path)
15
15
  chaps = []
16
16
  File.read(path, mode: 'rt:BOM|utf-8').split.each_with_index do |name, number|
17
- if path =~ /PREDEF/
18
- chaps << Chapter.mkchap(book, name)
19
- else
20
- chaps << Chapter.mkchap(book, name, number + 1)
21
- end
17
+ chaps << if /PREDEF/.match?(path)
18
+ Chapter.mkchap(book, name)
19
+ else
20
+ Chapter.mkchap(book, name, number + 1)
21
+ end
22
22
  end
23
23
  Part.mkpart(chaps)
24
24
  end
@@ -47,11 +47,11 @@ module ReVIEW
47
47
  else
48
48
  @content = ''
49
49
  end
50
- if file?
51
- @title = nil
52
- else
53
- @title = name
54
- end
50
+ @title = if file?
51
+ nil
52
+ else
53
+ name
54
+ end
55
55
  @volume = nil
56
56
 
57
57
  super()
@@ -78,11 +78,10 @@ module ReVIEW
78
78
 
79
79
  def volume
80
80
  if @number && file?
81
- vol = Volume.count_file(File.join(@book.config['contentdir'], @path))
81
+ Volume.count_file(File.join(@book.config['contentdir'], @path))
82
82
  else
83
- vol = Volume.new(0, 0, 0)
83
+ Volume.new(0, 0, 0)
84
84
  end
85
- vol
86
85
  end
87
86
 
88
87
  def file?
@@ -12,7 +12,7 @@ module ReVIEW
12
12
  def self.count_file(path)
13
13
  b = c = l = 0
14
14
  File.foreach(path) do |line|
15
- next if /\A\#@/ =~ line
15
+ next if /\A\#@/.match?(line)
16
16
 
17
17
  text = line.gsub(/\s+/, '')
18
18
  b += text.bytesize
@@ -62,11 +62,11 @@ module ReVIEW
62
62
  if @book && @book.config
63
63
  @img_math ||= ReVIEW::ImgMath.new(@book.config)
64
64
  if words_file_path = @book.config['words_file']
65
- if words_file_path.is_a?(String)
66
- words_files = [words_file_path]
67
- else
68
- words_files = words_file_path
69
- end
65
+ words_files = if words_file_path.is_a?(String)
66
+ [words_file_path]
67
+ else
68
+ words_file_path
69
+ end
70
70
  words_files.each do |f|
71
71
  load_words(f)
72
72
  end
@@ -134,11 +134,9 @@ module ReVIEW
134
134
  end
135
135
 
136
136
  def load_words(file)
137
- if File.exist?(file)
138
- if file =~ /\.csv\Z/i
139
- CSV.foreach(file) do |row|
140
- @dictionary[row[0]] = row[1]
141
- end
137
+ if File.exist?(file) && /\.csv\Z/i.match?(file)
138
+ CSV.foreach(file) do |row|
139
+ @dictionary[row[0]] = row[1]
142
140
  end
143
141
  end
144
142
  end
@@ -537,8 +535,8 @@ module ReVIEW
537
535
  params = metric.split(/,\s*/)
538
536
  results = []
539
537
  params.each do |param|
540
- if param =~ /\A.+?::/
541
- next unless param =~ /\A#{type}::/
538
+ if /\A.+?::/.match?(param)
539
+ next unless /\A#{type}::/.match?(param)
542
540
 
543
541
  param.sub!(/\A#{type}::/, '')
544
542
  end
@@ -4,11 +4,11 @@ require 'date'
4
4
  module ReVIEW
5
5
  class Catalog
6
6
  def initialize(file)
7
- if file.respond_to?(:read)
8
- @yaml = YAML.safe_load(file.read, [Date])
9
- else ## as Object
10
- @yaml = file
11
- end
7
+ @yaml = if file.respond_to?(:read)
8
+ YAMLLoader.safe_load(file.read)
9
+ else ## as Object
10
+ file
11
+ end
12
12
  @yaml ||= {}
13
13
  end
14
14
 
@@ -44,7 +44,7 @@ module ReVIEW
44
44
 
45
45
  def non_escaped_commands
46
46
  if @builder.highlight?
47
- %i[list emlist listnum emlistnum cmd]
47
+ %i[list emlist listnum emlistnum cmd source]
48
48
  else
49
49
  []
50
50
  end
@@ -71,7 +71,7 @@ module ReVIEW
71
71
  attr_reader :name
72
72
 
73
73
  def check_args(args)
74
- unless @argc_spec === args.size
74
+ unless @argc_spec === args.size # rubocop:disable Style/CaseEquality
75
75
  raise CompileError, "wrong # of parameters (block command //#{@name}, expect #{@argc_spec} but #{args.size})"
76
76
  end
77
77
 
@@ -467,7 +467,7 @@ module ReVIEW
467
467
  def compile_ulist(f)
468
468
  level = 0
469
469
  f.while_match(/\A\s+\*|\A\#@/) do |line|
470
- next if line =~ /\A\#@/
470
+ next if /\A\#@/.match?(line)
471
471
 
472
472
  buf = [text(line.sub(/\*+/, '').strip)]
473
473
  f.while_match(/\A\s+(?!\*)\S/) do |cont|
@@ -510,7 +510,7 @@ module ReVIEW
510
510
  def compile_olist(f)
511
511
  @builder.ol_begin
512
512
  f.while_match(/\A\s+\d+\.|\A\#@/) do |line|
513
- next if line =~ /\A\#@/
513
+ next if /\A\#@/.match?(line)
514
514
 
515
515
  num = line.match(/(\d+)\./)[1]
516
516
  buf = [text(line.sub(/\d+\./, '').strip)]
@@ -572,7 +572,7 @@ module ReVIEW
572
572
  f.until_match(%r{\A//\}}) do |line|
573
573
  if ignore_inline
574
574
  buf.push(line.chomp)
575
- elsif line !~ /\A\#@/
575
+ elsif !/\A\#@/.match?(line)
576
576
  buf.push(text(line.rstrip, true))
577
577
  end
578
578
  end
@@ -643,7 +643,7 @@ module ReVIEW
643
643
  str.gsub(/@<(\w+)>([$|])(.+?)(\2)/) do
644
644
  op = $1
645
645
  arg = $3
646
- if arg =~ /[\x01\x02\x03\x04]/
646
+ if /[\x01\x02\x03\x04]/.match?(arg)
647
647
  error "invalid character in '#{str}'", location: location
648
648
  end
649
649
  replaced = arg.tr('@', "\x01").tr('\\', "\x02").tr('{', "\x03").tr('}', "\x04")
@@ -671,17 +671,17 @@ module ReVIEW
671
671
  end
672
672
  result = ''
673
673
  until words.empty?
674
- if in_non_escaped_command? && block_mode
675
- result << revert_replace_fence(words.shift)
676
- else
677
- result << @builder.nofunc_text(revert_replace_fence(words.shift))
678
- end
674
+ result << if in_non_escaped_command? && block_mode
675
+ revert_replace_fence(words.shift)
676
+ else
677
+ @builder.nofunc_text(revert_replace_fence(words.shift))
678
+ end
679
679
  break if words.empty?
680
680
 
681
681
  result << compile_inline(revert_replace_fence(words.shift.gsub(/\\\}/, '}').gsub(/\\\\/, '\\')))
682
682
  end
683
683
  result
684
- rescue => e
684
+ rescue StandardError => e
685
685
  error e.message, location: location
686
686
  end
687
687
  public :text # called from builder
@@ -696,7 +696,7 @@ module ReVIEW
696
696
  end
697
697
 
698
698
  @builder.__send__("inline_#{op}", arg)
699
- rescue => e
699
+ rescue StandardError => e
700
700
  error e.message, location: location
701
701
  @builder.nofunc_text(str)
702
702
  end
@@ -1,5 +1,5 @@
1
1
  #
2
- # Copyright (c) 2012-2021 Masanori Kado, Masayoshi Takahashi, Kenshi Muto
2
+ # Copyright (c) 2012-2022 Masanori Kado, Masayoshi Takahashi, Kenshi Muto
3
3
  #
4
4
  # This program is free software.
5
5
  # You can distribute or modify this program under the terms of
@@ -141,6 +141,9 @@ module ReVIEW
141
141
  'force_include_images' => [],
142
142
  'cover_linear' => nil,
143
143
  'back_footnote' => nil
144
+ },
145
+ 'textmaker' => {
146
+ 'th_bold' => nil
144
147
  }
145
148
  ]
146
149
  conf.maker = nil
@@ -155,7 +158,7 @@ module ReVIEW
155
158
  begin
156
159
  loader = ReVIEW::YAMLLoader.new
157
160
  conf.deep_merge!(loader.load_file(yamlfile))
158
- rescue => e
161
+ rescue StandardError => e
159
162
  raise ReVIEW::ConfigError, "yaml error #{e.message}"
160
163
  end
161
164
  end
@@ -13,7 +13,7 @@ require 'review/version'
13
13
 
14
14
  begin
15
15
  require 'cgi/escape'
16
- rescue
16
+ rescue StandardError
17
17
  require 'cgi/util'
18
18
  end
19
19
 
@@ -62,10 +62,10 @@ EOT
62
62
  def parse_epub(epubname)
63
63
  Zip::File.open(epubname) do |zio|
64
64
  zio.each do |entry|
65
- if entry.name =~ /.+\.opf\Z/
65
+ if /.+\.opf\Z/.match?(entry.name)
66
66
  opf = entry.get_input_stream.read
67
67
  @opfxml = REXML::Document.new(opf)
68
- elsif entry.name =~ /.+\.x?html\Z/
68
+ elsif /.+\.x?html\Z/.match?(entry.name)
69
69
  @htmls[entry.name.sub('OEBPS/', '')] = entry.get_input_stream.read.force_encoding('utf-8')
70
70
  end
71
71
  end
@@ -107,15 +107,15 @@ EOT
107
107
  end
108
108
 
109
109
  file, anc = href.split('#', 2)
110
- if anc
111
- if file.empty?
112
- anc = "#{sanitize(fname)}_#{sanitize(anc)}"
113
- else
114
- anc = "#{sanitize(file)}_#{sanitize(anc)}"
115
- end
116
- else
117
- anc = sanitize(file)
118
- end
110
+ anc = if anc
111
+ if file.empty?
112
+ "#{sanitize(fname)}_#{sanitize(anc)}"
113
+ else
114
+ "#{sanitize(file)}_#{sanitize(anc)}"
115
+ end
116
+ else
117
+ sanitize(file)
118
+ end
119
119
 
120
120
  e.attributes['href'] = "##{anc}"
121
121
  end
@@ -76,7 +76,7 @@ module ReVIEW
76
76
  if @id.nil?
77
77
  @id = @file.gsub(%r{[\\/. ]}, '-')
78
78
  end
79
- if @id =~ /\A[^a-z]/i
79
+ if /\A[^a-z]/i.match?(@id)
80
80
  @id = "rv-#{@id}"
81
81
  end
82
82
  @id = CGI.escape(@id).gsub('%', '_25_')