review 5.8.0 → 5.10.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 368cf93a0b3ae0f5aaecebdef459f759ab45998b9236cfa983294711a4f135b6
4
- data.tar.gz: 9990d2ed06a889cc951c3db58b47431e8ad414842fb4e6868082e2c33dd73139
3
+ metadata.gz: c2a456720c918f2f50342dfbd711d1d1b5dbc78d73ff311f28ac1614797f358a
4
+ data.tar.gz: a674bd3277e09fc000f390036824472f2fdf1a51468efe513fe23f21c44246bd
5
5
  SHA512:
6
- metadata.gz: a78a8e4f75a856c15c492a9ef466efd72cad538a6c3378023b6c0dd83ec268e7a99126b16cb3d2ec158035b9f620380a50b759319131227c403b09b27bd8e8b6
7
- data.tar.gz: 7f14b429a757435416de52eb8bed9d05925c1694e647c2165b68c46c835fcea9f0f1e4ea7d908219ceceb3edb179bf130ffe2ef811fe58416d00aba6f0d4e068
6
+ metadata.gz: f0e3c8e8fdc5ea94c7931ddc1292e8a6a59717cbf6bb82e4c56233ef054fb3756dfb961f937252328951e66be184b4f924a8c8ca9bcb820bcb3d3567f98e4672
7
+ data.tar.gz: 7eff5222bde84c529d9688dd1f64c92c414cea0f20191f45ecf25c972f7a79bc3cb01c6381595063110c0f5abe816b01b9ee3fdffea29d0b671dcdf94959dfb7
@@ -13,7 +13,7 @@ jobs:
13
13
  strategy:
14
14
  fail-fast: false
15
15
  matrix:
16
- ruby: ['2.7', '3.0', '3.1', '3.2']
16
+ ruby: ['3.0', '3.1', '3.2', '3.3']
17
17
  os: [ubuntu-latest]
18
18
  steps:
19
19
  - uses: actions/checkout@v2
@@ -13,18 +13,26 @@ jobs:
13
13
  strategy:
14
14
  fail-fast: false
15
15
  matrix:
16
- ruby: ['2.7', '3.2']
17
- os: [ubuntu-20.04]
16
+ ruby: ['3.2']
17
+ os: [ubuntu-22.04]
18
18
  steps:
19
19
  - uses: actions/checkout@v2
20
- - name: Install TeXLive 2020 in ubuntu
20
+ - name: Install TeXLive 2021 in ubuntu
21
21
  if: runner.os == 'Linux'
22
22
  run: |
23
- sudo apt-get update -y -qq && sudo apt-get install -y -qq texlive-lang-japanese texlive-fonts-recommended texlive-fonts-extra texlive-luatex texlive-extra-utils texlive-latex-extra dvipng poppler-utils
23
+ sudo apt-get update -y -qq && sudo apt-get install -y -qq texlive-lang-japanese texlive-fonts-recommended texlive-fonts-extra texlive-luatex texlive-extra-utils texlive-latex-extra dvipng poppler-utils libfuse2
24
24
  - name: Set up Ruby
25
25
  uses: ruby/setup-ruby@v1
26
26
  with:
27
27
  ruby-version: ${{ matrix.ruby }}
28
+ - name: use vendor's imagemagick
29
+ run: |
30
+ export PATH=${GITHUB_WORKSPACE}/vendor/imagemagick:${PATH}
31
+ chmod 755 ${GITHUB_WORKSPACE}/vendor/imagemagick/magick
32
+ ln -s ${GITHUB_WORKSPACE}/vendor/imagemagick/magick ${GITHUB_WORKSPACE}/vendor/imagemagick/compare
33
+ which compare
34
+ magick -version
35
+ compare -version
28
36
  - name: fix ImageMagick policy.xml on Linux
29
37
  if: runner.os == 'Linux'
30
38
  run: sudo sed -i 's/none/read|write/g' /etc/ImageMagick-6/policy.xml
@@ -34,6 +42,7 @@ jobs:
34
42
  node-version: 18
35
43
  - name: Build and test with Rake
36
44
  run: |
45
+ export PATH=${GITHUB_WORKSPACE}/vendor/imagemagick:${PATH}
37
46
  gem install bundler --no-document
38
47
  bundle install --retry 3
39
48
  bundle exec rake
@@ -13,7 +13,7 @@ jobs:
13
13
  strategy:
14
14
  fail-fast: false
15
15
  matrix:
16
- ruby: [ '3.2', '3.1', '3.0', '2.7' ]
16
+ ruby: [ '3.3', '3.2', '3.1', '3.0' ]
17
17
 
18
18
  steps:
19
19
  - uses: actions/checkout@v2
@@ -13,7 +13,7 @@ jobs:
13
13
  strategy:
14
14
  fail-fast: false
15
15
  matrix:
16
- ruby: ['2.7', '3.0', '3.1', '3.2']
16
+ ruby: ['3.0', '3.1', '3.2', '3.3']
17
17
  os: [ubuntu-latest, macOS-latest]
18
18
  steps:
19
19
  - uses: actions/checkout@v2
data/.rubocop.yml CHANGED
@@ -5,7 +5,7 @@ AllCops:
5
5
  - tmp/*
6
6
  DisplayCopNames: true
7
7
  NewCops: enable
8
- TargetRubyVersion: 2.7
8
+ TargetRubyVersion: 3.0
9
9
 
10
10
  require:
11
11
  - rubocop-performance
@@ -41,6 +41,9 @@ Performance/CollectionLiteralInLoop:
41
41
  Performance/MapCompact:
42
42
  Enabled: false
43
43
 
44
+ Performance/StringIdentifierArgument:
45
+ Enabled: false
46
+
44
47
  #### Style
45
48
 
46
49
  Style/AsciiComments:
data/NEWS.ja.md CHANGED
@@ -1,3 +1,44 @@
1
+ # Version 5.10.0
2
+ ## バグ修正
3
+ * サブディレクトリとカスタムページを両方指定するとエラーが発生するバグを修正しました([#1913],[#1914])
4
+ * EPUBBuilder: ビルド時間が長い問題を解決しました([#1915],[#1916],[#1919])
5
+ * ImageMagickのcompareのmetricに`SSIM`を使うように変更し、環境によってテストが失敗する問題を修正しました([#1917],[#1921])
6
+ * EPUBMaker: `verify_target_images`が有効な場合、coverimageを暗黙に取り込むよう修正しました([#1918],[#1923])
7
+
8
+ ## 機能強化
9
+ * Ruby 3.4で`csv` gemと`nkf` gemがdefault gemではなくなる警告に対応しました([#1911])
10
+
11
+ ## コントリビューターのみなさん
12
+ * [@fabon-f](https://github.com/fabon-f)
13
+
14
+ [#1911]: https://github.com/kmuto/review/pull/1911
15
+ [#1913]: https://github.com/kmuto/review/issues/1913
16
+ [#1914]: https://github.com/kmuto/review/pull/1914
17
+ [#1915]: https://github.com/kmuto/review/issues/1915
18
+ [#1916]: https://github.com/kmuto/review/issues/1916
19
+ [#1917]: https://github.com/kmuto/review/issues/1917
20
+ [#1918]: https://github.com/kmuto/review/issues/1918
21
+ [#1919]: https://github.com/kmuto/review/pull/1919
22
+ [#1921]: https://github.com/kmuto/review/pull/1921
23
+ [#1923]: https://github.com/kmuto/review/pull/1923
24
+
25
+ # Version 5.9.0
26
+ ## バグ修正
27
+ * LATEXBuilder: `@<code>`, `@<tt>`, `@<tti>`, `@<ttb>`での空白幅が適切になるよう修正しました。またPDF栞の扱いを改善しました([#1906],[#1907])。
28
+
29
+ ## 機能強化
30
+ * `review-jlreq.cls`のUsers Guideで用紙サイズの指定にJIS B列とISO B列を区別するようにしました([#1904])
31
+ * `config.yml.sample`での誤記を修正しました([#1909])
32
+
33
+ ## コントリビューターのみなさん
34
+ * [@munepi](https://github.com/munepi)
35
+ * [@koshikawa](https://github.com/koshikawa)
36
+
37
+ [#1904]: https://github.com/kmuto/review/pull/1904
38
+ [#1906]: https://github.com/kmuto/review/issues/1906
39
+ [#1907]: https://github.com/kmuto/review/pull/1907
40
+ [#1909]: https://github.com/kmuto/review/pull/1909
41
+
1
42
  # Version 5.8.0
2
43
  ## 新機能
3
44
  * `//graph` 命令でMermaid記法によるグラフ記述ができるようになりました。外部ツールの用意や設定については`doc/format.ja.md`を参照してください ([#1885])
data/NEWS.md CHANGED
@@ -1,3 +1,44 @@
1
+ # Version 5.10.0
2
+ ## Bug Fixes
3
+ * Fixed an issue where specifying both a subdirectory and a custom page would cause an error ([#1913], [#1914]).
4
+ * EPUBBuilder: Resolved an issue with long build times. ([#1915], [#1916], [#1919]).
5
+ * EPUBMaker: When `verify_target_images` is enabled, modified to implicitly include coverimage ([#1918], [#1923]).
6
+ * Changed the metric option of ImageMagick's compare command to use `SSIM` ([#1917], [#1921]).
7
+
8
+ ## Enhancements
9
+ * Resolved warnings about the `csv` and `nkf` gems no longer being default gems in Ruby 3.4 ([#1911]).
10
+
11
+ ## Contributors
12
+ * [@fabon-f](https://github.com/fabon-f)
13
+
14
+ [#1911]: https://github.com/kmuto/review/pull/1911
15
+ [#1913]: https://github.com/kmuto/review/issues/1913
16
+ [#1914]: https://github.com/kmuto/review/pull/1914
17
+ [#1915]: https://github.com/kmuto/review/issues/1915
18
+ [#1916]: https://github.com/kmuto/review/issues/1916
19
+ [#1917]: https://github.com/kmuto/review/issues/1917
20
+ [#1918]: https://github.com/kmuto/review/issues/1918
21
+ [#1919]: https://github.com/kmuto/review/pull/1919
22
+ [#1921]: https://github.com/kmuto/review/pull/1921
23
+ [#1923]: https://github.com/kmuto/review/pull/1923
24
+
25
+ # Version 5.9.0
26
+ ## Bug Fixes
27
+ * LATEXBuilder: fix the spacing for `@<code>`, `@<tt>`, `@<tti>`, `@<ttb>` to be more appropriate. Also improved handling of PDF bookmarks ([#1906], [#1907]).
28
+
29
+ ## Enhancements
30
+ * differentiated between JIS B and ISO B paper sizes in `review-jlreq.cls` Users Guide ([#1904]).
31
+ * fix typos in `config.yml.sample` ([#1909]).
32
+
33
+ ## Contributors
34
+ * [@munepi](https://github.com/munepi)
35
+ * [@koshikawa](https://github.com/koshikawa)
36
+
37
+ [#1904]: https://github.com/kmuto/review/pull/1904
38
+ [#1906]: https://github.com/kmuto/review/issues/1906
39
+ [#1907]: https://github.com/kmuto/review/pull/1907
40
+ [#1909]: https://github.com/kmuto/review/pull/1909
41
+
1
42
  # Version 5.8.0
2
43
  ## New Features
3
44
  * The `//graph` operator allows graphical description in Mermaid notation. See `doc/format.md` for details on prepairing and setting up external tools ([#1885])
data/README.md CHANGED
@@ -117,4 +117,4 @@ Exception:
117
117
 
118
118
  ## Copyright
119
119
 
120
- Copyright (c) 2006-2023 Minero Aoki, Kenshi Muto, Masayoshi Takahashi, Masanori Kado.
120
+ Copyright (c) 2006-2024 Minero Aoki, Kenshi Muto, Masayoshi Takahashi, Masanori Kado.
@@ -332,7 +332,7 @@ epubmaker:
332
332
  # 画像ファイルの縦x横の最大ピクセル数許容値
333
333
  # image_maxpixels: 4000000
334
334
  #
335
- # Re:VIEWファイル名を使わず、前付にpre01,pre02...、本文にchap01,chap02l...、後付にpost01,post02...という名前付けルールにするか
335
+ # Re:VIEWファイル名を使わず、前付にpre01,pre02...、本文にchap01,chap02...、後付にpost01,post02...という名前付けルールにするか
336
336
  # rename_for_legacy: null
337
337
  #
338
338
  # ePUBアーカイブの非圧縮実行
@@ -10,6 +10,7 @@
10
10
  require 'review/configure'
11
11
  require 'review/catalog'
12
12
  require 'review/book/bib'
13
+ require 'review/book/cache'
13
14
 
14
15
  module ReVIEW
15
16
  module Book
@@ -19,6 +20,7 @@ module ReVIEW
19
20
  attr_accessor :catalog
20
21
  attr_reader :basedir
21
22
  attr_accessor :bibpaper_index
23
+ attr_reader :cache
22
24
 
23
25
  def self.load(basedir = '.', config: nil)
24
26
  new(basedir, config: config)
@@ -39,6 +41,8 @@ module ReVIEW
39
41
 
40
42
  @warn_old_files = {} # XXX for checking CHAPS, PREDEF, POSTDEF
41
43
  @basedir_seen = {}
44
+
45
+ @cache = ReVIEW::Book::Cache.new
42
46
  update_rubyenv
43
47
  end
44
48
 
@@ -0,0 +1,54 @@
1
+ #
2
+ # Copyright (c) 2014-2024 Minero Aoki, Kenshi Muto, Masayoshi Takahashi
3
+ #
4
+ # This program is free software.
5
+ # You can distribute or modify this program under the terms of
6
+ # the GNU LGPL, Lesser General Public License version 2.1.
7
+ # For details of LGPL, see the file "COPYING".
8
+ #
9
+ module ReVIEW
10
+ module Book
11
+ class Cache
12
+ def initialize
13
+ @store = {}
14
+ end
15
+
16
+ def reset
17
+ @store.clear
18
+ end
19
+
20
+ # key should be Symbol, not String
21
+ def fetch(key, &block)
22
+ raise ArgumentError, 'Key should be Symbol' unless key.is_a?(Symbol)
23
+
24
+ if cached?(key)
25
+ read(key)
26
+ else
27
+ exec_block_and_save(key, &block)
28
+ end
29
+ end
30
+
31
+ def cached?(key)
32
+ @store.key?(key)
33
+ end
34
+
35
+ private
36
+
37
+ def read(key)
38
+ @store[key]
39
+ end
40
+
41
+ def write(key, value)
42
+ @store[key] = value
43
+ end
44
+
45
+ def exec_block_and_save(key)
46
+ result = yield(key)
47
+
48
+ write(key, result)
49
+
50
+ result
51
+ end
52
+ end
53
+ end
54
+ end
@@ -26,7 +26,9 @@ module ReVIEW
26
26
  end
27
27
 
28
28
  def dir_entries
29
- Dir.glob(File.join(@basedir, '**{,/*/**}/*.*')).uniq.sort.map { |entry| entry.sub(%r{^\./}, '') }
29
+ @book.cache.fetch(:image_finder_dir_entries) do
30
+ Dir.glob(File.join(@basedir, '**{,/*/**}/*.*')).uniq.sort.map { |entry| entry.sub(%r{^\./}, '') }
31
+ end
30
32
  end
31
33
 
32
34
  def add_entry(path)
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2002-2023 Minero Aoki, Kenshi Muto
1
+ # Copyright (c) 2002-2024 Minero Aoki, Kenshi Muto
2
2
  #
3
3
  # This program is free software.
4
4
  # You can distribute or modify this program under the terms of
@@ -133,7 +133,7 @@ module ReVIEW
133
133
  end
134
134
 
135
135
  def target_name
136
- self.class.to_s.gsub(/ReVIEW::/, '').gsub(/Builder/, '').downcase
136
+ self.class.to_s.gsub('ReVIEW::', '').gsub('Builder', '').downcase
137
137
  end
138
138
 
139
139
  def load_words(file)
@@ -405,10 +405,10 @@ module ReVIEW
405
405
  def inline_ruby(arg)
406
406
  base, *ruby = *arg.scan(/(?:(?:(?:\\\\)*\\,)|[^,\\]+)+/)
407
407
  if base
408
- base = base.gsub(/\\,/, ',').strip
408
+ base = base.gsub('\,', ',').strip
409
409
  end
410
410
  if ruby
411
- ruby = ruby.join(',').gsub(/\\,/, ',').strip
411
+ ruby = ruby.join(',').gsub('\,', ',').strip
412
412
  end
413
413
  compile_ruby(base, ruby)
414
414
  end
@@ -420,9 +420,9 @@ module ReVIEW
420
420
 
421
421
  def inline_href(arg)
422
422
  url, label = *arg.scan(/(?:(?:(?:\\\\)*\\,)|[^,\\]+)+/).map(&:lstrip)
423
- url = url.gsub(/\\,/, ',').strip
423
+ url = url.gsub('\,', ',').strip
424
424
  if label
425
- label = label.gsub(/\\,/, ',').strip
425
+ label = label.gsub('\,', ',').strip
426
426
  end
427
427
  compile_href(url, label)
428
428
  end
@@ -640,7 +640,7 @@ module ReVIEW
640
640
  tf.puts content
641
641
  tf.close
642
642
  begin
643
- file_path = send("graph_#{command}".to_sym, id, file_path, content, tf.path)
643
+ file_path = send(:"graph_#{command}", id, file_path, content, tf.path)
644
644
  ensure
645
645
  tf.unlink
646
646
  end
@@ -773,7 +773,7 @@ EOTGNUPLOT
773
773
  ## override TextUtils::detab
774
774
  def detab(str, num = nil)
775
775
  if num
776
- super(str, num)
776
+ super
777
777
  elsif @tabwidth
778
778
  super(str, @tabwidth)
779
779
  else
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2009-2022 Minero Aoki, Kenshi Muto
1
+ # Copyright (c) 2009-2024 Minero Aoki, Kenshi Muto
2
2
  # Copyright (c) 2002-2007 Minero Aoki
3
3
  #
4
4
  # This program is free software.
@@ -681,7 +681,7 @@ module ReVIEW
681
681
  end
682
682
  break if words.empty?
683
683
 
684
- result << compile_inline(revert_replace_fence(words.shift.gsub(/\\\}/, '}').gsub(/\\\\/, '\\')))
684
+ result << compile_inline(revert_replace_fence(words.shift.gsub('\\}', '}').gsub('\\\\', '\\')))
685
685
  end
686
686
  result
687
687
  rescue StandardError => e
@@ -1,6 +1,6 @@
1
1
  # = epubcommon.rb -- super class for EPUBv2 and EPUBv3
2
2
  #
3
- # Copyright (c) 2010-2023 Kenshi Muto and Masayoshi Takahashi
3
+ # Copyright (c) 2010-2024 Kenshi Muto and Masayoshi Takahashi
4
4
  #
5
5
  # This program is free software.
6
6
  # You can distribute or modify this program under the terms of
@@ -320,19 +320,19 @@ module ReVIEW
320
320
  end
321
321
 
322
322
  def produce_write_common(basedir, tmpdir)
323
- File.write("#{tmpdir}/mimetype", mimetype)
323
+ File.write(File.join(tmpdir, 'mimetype'), mimetype)
324
324
 
325
- FileUtils.mkdir_p("#{tmpdir}/META-INF")
326
- File.write("#{tmpdir}/META-INF/container.xml", container)
325
+ FileUtils.mkdir_p(File.join(tmpdir, 'META-INF'))
326
+ File.write(File.join(tmpdir, 'META-INF', 'container.xml'), container)
327
327
 
328
- FileUtils.mkdir_p("#{tmpdir}/OEBPS")
328
+ FileUtils.mkdir_p(File.join(tmpdir, 'OEBPS'))
329
329
  File.write(File.join(tmpdir, opf_path), opf)
330
330
 
331
331
  if config['cover']
332
- if File.exist?("#{basedir}/#{config['cover']}")
333
- FileUtils.cp("#{basedir}/#{config['cover']}", "#{tmpdir}/OEBPS")
332
+ if File.exist?(File.join(basedir, File.basename(config['cover'])))
333
+ FileUtils.cp(File.join(basedir, File.basename(config['cover'])), File.join(tmpdir, 'OEBPS'))
334
334
  else
335
- File.write("#{tmpdir}/OEBPS/#{config['cover']}", cover)
335
+ File.write(File.join(tmpdir, 'OEBPS', File.basename(config['cover'])), cover)
336
336
  end
337
337
  end
338
338
 
@@ -344,13 +344,13 @@ module ReVIEW
344
344
  contents.each do |item|
345
345
  next if /#/.match?(item.file) # skip subgroup
346
346
 
347
- fname = "#{basedir}/#{item.file}"
347
+ fname = File.join(basedir, item.file)
348
348
  unless File.exist?(fname)
349
349
  raise ApplicationError, "#{fname} is not found."
350
350
  end
351
351
 
352
- FileUtils.mkdir_p(File.dirname("#{tmpdir}/OEBPS/#{item.file}"))
353
- FileUtils.cp(fname, "#{tmpdir}/OEBPS/#{item.file}")
352
+ FileUtils.mkdir_p(File.dirname(File.join(tmpdir, 'OEBPS', item.file)))
353
+ FileUtils.cp(fname, File.join(tmpdir, 'OEBPS', item.file))
354
354
  end
355
355
  end
356
356
 
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2010-2023 Kenshi Muto and Masayoshi Takahashi
1
+ # Copyright (c) 2010-2024 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
@@ -214,12 +214,17 @@ module ReVIEW
214
214
  File.open(File.join(basetmpdir, content.file)) do |f|
215
215
  f.each_line do |l|
216
216
  l.scan(/url\((.+?)\)/) do |_m|
217
- @config['epubmaker']['force_include_images'].push($1.strip)
217
+ @config['epubmaker']['force_include_images'].push($1.strip.gsub(/\A(['"])(.*)\1\Z/, '\2'))
218
218
  end
219
219
  end
220
220
  end
221
221
  end
222
222
  end
223
+
224
+ if @config['coverimage']
225
+ @config['epubmaker']['force_include_images'].push(File.join(@config['imagedir'], @config['coverimage']))
226
+ end
227
+
223
228
  @config['epubmaker']['force_include_images'] = @config['epubmaker']['force_include_images'].compact.sort.uniq
224
229
  end
225
230
 
@@ -523,7 +528,7 @@ module ReVIEW
523
528
  end
524
529
 
525
530
  def copy_static_file(configname, destdir, destfilename: nil)
526
- destfilename ||= @config[configname]
531
+ destfilename ||= File.basename(@config[configname])
527
532
  unless File.exist?(@config[configname])
528
533
  error! "#{configname}: #{@config[configname]} is not found."
529
534
  end
@@ -455,7 +455,7 @@ module ReVIEW
455
455
 
456
456
  def list(lines, id, caption, lang = nil)
457
457
  puts %Q(<div id="#{normalize_id(id)}" class="caption-code">)
458
- super(lines, id, caption, lang)
458
+ super
459
459
  puts '</div>'
460
460
  end
461
461
 
@@ -480,7 +480,7 @@ module ReVIEW
480
480
 
481
481
  def source(lines, caption = nil, lang = nil)
482
482
  puts %Q(<div class="source-code">)
483
- super(lines, caption, lang)
483
+ super
484
484
  puts '</div>'
485
485
  end
486
486
 
@@ -500,7 +500,7 @@ module ReVIEW
500
500
 
501
501
  def listnum(lines, id, caption, lang = nil)
502
502
  puts %Q(<div id="#{normalize_id(id)}" class="code">)
503
- super(lines, id, caption, lang)
503
+ super
504
504
  puts '</div>'
505
505
  end
506
506
 
@@ -737,7 +737,7 @@ module ReVIEW
737
737
  else
738
738
  puts %Q(<div class="table">)
739
739
  end
740
- super(lines, id, caption)
740
+ super
741
741
  puts '</div>'
742
742
  end
743
743
 
@@ -1117,9 +1117,9 @@ EOS
1117
1117
  chap, id2 = extract_chapter_id(id)
1118
1118
  n = chap.headline_index.number(id2)
1119
1119
  anchor = 'h' + n.tr('.', '-')
1120
- %Q(<a href="#{chap.id}#{extname}##{anchor}">#{super(id)}</a>)
1120
+ %Q(<a href="#{chap.id}#{extname}##{anchor}">#{super}</a>)
1121
1121
  else
1122
- super(id)
1122
+ super
1123
1123
  end
1124
1124
  rescue KeyError
1125
1125
  app_error "unknown headline: #{id}"
@@ -1129,9 +1129,9 @@ EOS
1129
1129
  if @book.config['chapterlink']
1130
1130
  chap, id2 = extract_chapter_id(id)
1131
1131
  anchor = 'h' + chap.headline_index.number(id2).tr('.', '-')
1132
- %Q(<a href="#{chap.id}#{extname}##{anchor}">#{super(id)}</a>)
1132
+ %Q(<a href="#{chap.id}#{extname}##{anchor}">#{super}</a>)
1133
1133
  else
1134
- super(id)
1134
+ super
1135
1135
  end
1136
1136
  rescue KeyError
1137
1137
  app_error "unknown headline: #{id}"
@@ -1154,7 +1154,7 @@ EOS
1154
1154
  end
1155
1155
 
1156
1156
  def inline_list(id)
1157
- str = super(id)
1157
+ str = super
1158
1158
  chapter, id = extract_chapter_id(id)
1159
1159
  if @book.config['chapterlink']
1160
1160
  %Q(<span class="listref"><a href="./#{chapter.id}#{extname}##{normalize_id(id)}">#{str}</a></span>)
@@ -1164,7 +1164,7 @@ EOS
1164
1164
  end
1165
1165
 
1166
1166
  def inline_table(id)
1167
- str = super(id)
1167
+ str = super
1168
1168
  chapter, id = extract_chapter_id(id)
1169
1169
  if @book.config['chapterlink']
1170
1170
  %Q(<span class="tableref"><a href="./#{chapter.id}#{extname}##{normalize_id(id)}">#{str}</a></span>)
@@ -1174,7 +1174,7 @@ EOS
1174
1174
  end
1175
1175
 
1176
1176
  def inline_img(id)
1177
- str = super(id)
1177
+ str = super
1178
1178
  chapter, id = extract_chapter_id(id)
1179
1179
  if @book.config['chapterlink']
1180
1180
  %Q(<span class="imgref"><a href="./#{chapter.id}#{extname}##{normalize_id(id)}">#{str}</a></span>)
@@ -1184,7 +1184,7 @@ EOS
1184
1184
  end
1185
1185
 
1186
1186
  def inline_eq(id)
1187
- str = super(id)
1187
+ str = super
1188
1188
  chapter, id = extract_chapter_id(id)
1189
1189
  if @book.config['chapterlink']
1190
1190
  %Q(<span class="eqref"><a href="./#{chapter.id}#{extname}##{normalize_id(id)}">#{str}</a></span>)
@@ -1308,7 +1308,7 @@ EOS
1308
1308
  end
1309
1309
 
1310
1310
  def inline_raw(str) # rubocop:disable Lint/UselessMethodDefinition
1311
- super(str)
1311
+ super
1312
1312
  end
1313
1313
 
1314
1314
  def nofunc_text(str)
@@ -35,7 +35,7 @@ module ReVIEW
35
35
  end
36
36
 
37
37
  def encode_args(args)
38
- args.delete_if { |_k, v| v.nil? }.map { |k, v| "#{k}=#{v}" }.join(',')
38
+ args.compact.map { |k, v| "#{k}=#{v}" }.join(',')
39
39
  end
40
40
  end
41
41
  end
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2008-2023 Minero Aoki, Kenshi Muto
1
+ # Copyright (c) 2008-2024 Minero Aoki, Kenshi Muto
2
2
  # 2002-2007 Minero Aoki
3
3
  #
4
4
  # This program is free software.
@@ -273,7 +273,7 @@ module ReVIEW
273
273
  end
274
274
 
275
275
  def inline_list(id)
276
- "<span type='list'>#{super(id)}</span>"
276
+ "<span type='list'>#{super}</span>"
277
277
  end
278
278
 
279
279
  def list_header(id, caption, _lang)
@@ -304,7 +304,7 @@ module ReVIEW
304
304
 
305
305
  def list(lines, id, caption, lang = nil)
306
306
  puts '<codelist>'
307
- super(lines, id, caption, lang)
307
+ super
308
308
  puts '</codelist>'
309
309
  end
310
310
 
@@ -329,7 +329,7 @@ module ReVIEW
329
329
 
330
330
  def listnum(lines, id, caption, lang = nil)
331
331
  puts '<codelist>'
332
- super(lines, id, caption, lang)
332
+ super
333
333
  puts '</codelist>'
334
334
  end
335
335
 
@@ -389,15 +389,15 @@ module ReVIEW
389
389
  end
390
390
 
391
391
  def inline_table(id)
392
- "<span type='table'>#{super(id)}</span>"
392
+ "<span type='table'>#{super}</span>"
393
393
  end
394
394
 
395
395
  def inline_img(id)
396
- "<span type='image'>#{super(id)}</span>"
396
+ "<span type='image'>#{super}</span>"
397
397
  end
398
398
 
399
399
  def inline_eq(id)
400
- "<span type='eq'>#{super(id)}</span>"
400
+ "<span type='eq'>#{super}</span>"
401
401
  end
402
402
 
403
403
  def inline_imgref(id)
@@ -532,9 +532,9 @@ module ReVIEW
532
532
  next
533
533
  end
534
534
  if @tablewidth
535
- rows.push(line.gsub(/\t\.\t/, "\tDUMMYCELLSPLITTER\t").gsub(/\t\.\.\t/, "\t.\t").gsub(/\t\.\Z/, "\tDUMMYCELLSPLITTER").gsub(/\t\.\.\Z/, "\t.").gsub(/\A\./, ''))
535
+ rows.push(line.gsub("\t.\t", "\tDUMMYCELLSPLITTER\t").gsub("\t..\t", "\t.\t").gsub(/\t\.\Z/, "\tDUMMYCELLSPLITTER").gsub(/\t\.\.\Z/, "\t.").gsub(/\A\./, ''))
536
536
  else
537
- rows.push(line.gsub(/\t\.\t/, "\t\t").gsub(/\t\.\.\t/, "\t.\t").gsub(/\t\.\Z/, "\t").gsub(/\t\.\.\Z/, "\t.").gsub(/\A\./, ''))
537
+ rows.push(line.gsub("\t.\t", "\t\t").gsub("\t..\t", "\t.\t").gsub(/\t\.\Z/, "\t").gsub(/\t\.\.\Z/, "\t.").gsub(/\A\./, ''))
538
538
  end
539
539
  col2 = rows[rows.length - 1].split(table_row_separator_regexp).length
540
540
  @col = col2 if col2 > @col
@@ -725,7 +725,7 @@ module ReVIEW
725
725
  end
726
726
 
727
727
  def inline_raw(str)
728
- super(str).gsub('\\n', "\n")
728
+ super.gsub('\\n', "\n")
729
729
  end
730
730
 
731
731
  def inline_hint(str)
@@ -556,7 +556,7 @@ module ReVIEW
556
556
  end
557
557
 
558
558
  def parse_metric(type, metric)
559
- s = super(type, metric)
559
+ s = super
560
560
  if @book.config['pdfmaker']['use_original_image_size'] && s.empty? && !metric.present?
561
561
  return ' ' # pass empty to \reviewincludegraphics
562
562
  end
@@ -1292,11 +1292,11 @@ module ReVIEW
1292
1292
 
1293
1293
  def inline_sec(id)
1294
1294
  if @book.config['chapterlink']
1295
- n = super(id)
1295
+ n = super
1296
1296
  anchor = n.tr('.', '-')
1297
1297
  macro('reviewsecref', n, sec_label(anchor))
1298
1298
  else
1299
- super(id)
1299
+ super
1300
1300
  end
1301
1301
  rescue KeyError
1302
1302
  app_error "unknown headline: #{id}"
@@ -1306,9 +1306,9 @@ module ReVIEW
1306
1306
  if @book.config['chapterlink']
1307
1307
  chap, id2 = extract_chapter_id(id)
1308
1308
  anchor = chap.headline_index.number(id2).tr('.', '-')
1309
- macro('reviewsecref', super(id), sec_label(anchor))
1309
+ macro('reviewsecref', super, sec_label(anchor))
1310
1310
  else
1311
- super(id)
1311
+ super
1312
1312
  end
1313
1313
  end
1314
1314
 
@@ -1321,7 +1321,7 @@ module ReVIEW
1321
1321
  end
1322
1322
 
1323
1323
  def inline_raw(str) # rubocop:disable Lint/UselessMethodDefinition
1324
- super(str)
1324
+ super
1325
1325
  end
1326
1326
 
1327
1327
  def inline_sub(str)
data/lib/review/logger.rb CHANGED
@@ -3,7 +3,7 @@ require 'logger'
3
3
  module ReVIEW
4
4
  class Logger < ::Logger
5
5
  def initialize(io = $stderr, progname: '--')
6
- super(io, progname: progname)
6
+ super
7
7
  self.formatter = ->(severity, _datetime, name, msg) { "#{severity} #{name}: #{msg}\n" }
8
8
  end
9
9
 
@@ -32,7 +32,7 @@ module ReVIEW
32
32
  end
33
33
 
34
34
  def ttylogger?
35
- nil
35
+ false
36
36
  end
37
37
 
38
38
  def success(_log)
@@ -190,19 +190,19 @@ module ReVIEW
190
190
  end
191
191
 
192
192
  def inline_i(str)
193
- "*#{str.gsub(/\*/, '\*')}*"
193
+ "*#{str.gsub('*', '\*')}*"
194
194
  end
195
195
 
196
196
  def inline_em(str)
197
- "*#{str.gsub(/\*/, '\*')}*"
197
+ "*#{str.gsub('*', '\*')}*"
198
198
  end
199
199
 
200
200
  def inline_b(str)
201
- "**#{str.gsub(/\*/, '\*')}**"
201
+ "**#{str.gsub('*', '\*')}**"
202
202
  end
203
203
 
204
204
  def inline_strong(str)
205
- "**#{str.gsub(/\*/, '\*')}**"
205
+ "**#{str.gsub('*', '\*')}**"
206
206
  end
207
207
 
208
208
  def inline_code(str)
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2010-2023 Kenshi Muto and Masayoshi Takahashi
1
+ # Copyright (c) 2010-2024 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
@@ -339,6 +339,7 @@ module ReVIEW
339
339
  File.read(file_sty)
340
340
  else
341
341
  warn "File #{file_sty} is not found."
342
+ nil
342
343
  end
343
344
  end
344
345
 
@@ -505,6 +506,15 @@ module ReVIEW
505
506
  template_dir = @basedir
506
507
  template_path = 'layouts/layout.tex.erb'
507
508
  end
509
+
510
+ if @config['cover'] && !File.exist?(@config['cover'])
511
+ error! "File #{@config['cover']} is not found."
512
+ end
513
+
514
+ if @config['titlepage'] && @config['titlefile'] && !File.exist?(@config['titlefile'])
515
+ error! "File #{@config['titlefile']} is not found."
516
+ end
517
+
508
518
  ReVIEW::Template.generate(path: template_path, mode: '-', binding: binding, template_dir: template_dir)
509
519
  rescue StandardError => e
510
520
  if defined?(e.full_message)
@@ -362,7 +362,7 @@ module ReVIEW
362
362
  end
363
363
 
364
364
  def inline_raw(str)
365
- super(str).gsub('\\n', "\n")
365
+ super.gsub('\\n', "\n")
366
366
  end
367
367
 
368
368
  def inline_hidx(_str)
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2008-2020 Minero Aoki, Kenshi Muto, Masayoshi Takahashi,
1
+ # Copyright (c) 2008-2023 Minero Aoki, Kenshi Muto, Masayoshi Takahashi,
2
2
  # KADO Masanori
3
3
  # 2002-2007 Minero Aoki
4
4
  #
@@ -49,7 +49,7 @@ module ReVIEW
49
49
  tail = line1[-1]
50
50
  head = line2[0]
51
51
  if tail.nil? || head.nil?
52
- return nil
52
+ return false
53
53
  end
54
54
 
55
55
  space = true
@@ -21,12 +21,12 @@ module ReVIEW
21
21
  print "\x01H#{level}\x01"
22
22
  end
23
23
  # embed header information for tocparser
24
- super(level, label, caption)
24
+ super
25
25
  end
26
26
 
27
27
  def base_block(type, lines, caption = nil)
28
28
  puts "\x01STARTLIST\x01"
29
- super(type, lines, caption)
29
+ super
30
30
  puts "\x01ENDLIST\x01"
31
31
  end
32
32
 
@@ -1,3 +1,3 @@
1
1
  module ReVIEW
2
- VERSION = '5.8.0'.freeze
2
+ VERSION = '5.10.0'.freeze
3
3
  end
@@ -16,7 +16,9 @@ module ReVIEW
16
16
  YAML.safe_load(f, [Date])
17
17
  rescue Psych::DisallowedClass
18
18
  # < Ruby 2.5
19
+ # rubocop:disable Style/YAMLFileRead
19
20
  YAML.safe_load(File.read(file), [Date])
21
+ # rubocop:enable Style/YAMLFileRead
20
22
  end
21
23
  end
22
24
  end
data/review.gemspec CHANGED
@@ -14,21 +14,23 @@ Gem::Specification.new do |gem|
14
14
  gem.required_rubygems_version = Gem::Requirement.new('>= 0') if gem.respond_to?(:required_rubygems_version=)
15
15
  gem.metadata = { 'rubygems_mfa_required' => 'true' }
16
16
 
17
- gem.files = `git ls-files`.split("\n").reject { |f| f.match(/^test/) }
17
+ gem.files = `git ls-files`.split("\n").reject { |f| f.match(/^test/) }.reject { |f| f.match(%r{^vendor/imagemagick}) }
18
18
  gem.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
19
19
  gem.extra_rdoc_files = []
20
20
  gem.require_paths = ['lib']
21
21
 
22
+ gem.add_dependency('csv')
22
23
  gem.add_dependency('image_size')
24
+ gem.add_dependency('nkf')
23
25
  gem.add_dependency('rexml')
24
26
  gem.add_dependency('rouge')
25
27
  gem.add_dependency('rubyzip')
26
28
  gem.add_dependency('tty-logger')
27
- gem.add_development_dependency('mini_magick')
29
+ gem.add_development_dependency('mini_magick', '~> 5.0.0')
28
30
  gem.add_development_dependency('playwright-runner')
29
31
  gem.add_development_dependency('pygments.rb')
30
32
  gem.add_development_dependency('rake')
31
- gem.add_development_dependency('rubocop', '~> 1.45.1')
33
+ gem.add_development_dependency('rubocop', '~> 1.65.1')
32
34
  gem.add_development_dependency('rubocop-performance')
33
35
  gem.add_development_dependency('rubocop-rake')
34
36
  gem.add_development_dependency('simplecov')
@@ -153,7 +153,7 @@ colophon: true
153
153
  # verify_target_images: null
154
154
  # verify_target_imagesがtrueの状態において、解析で発見されなくても強制的に取り込むファイルの相対パスの配列
155
155
  # force_include_images: []
156
- # Re:VIEWファイル名を使わず、前付にpre01,pre02...、本文にchap01,chap02l...、後付にpost01,post02...という名前付けルールにするか
156
+ # Re:VIEWファイル名を使わず、前付にpre01,pre02...、本文にchap01,chap02...、後付にpost01,post02...という名前付けルールにするか
157
157
  # rename_for_legacy: null
158
158
  # ePUBアーカイブの非圧縮実行
159
159
  # zip_stage1: "zip -0Xq"
@@ -1,5 +1,5 @@
1
1
  # call me by 'REVIEW_TEMPLATE=review-jlreq REVIEW_CONFIG_FILE=config-jlreq.yml rake pdf'
2
2
  inherit: ["config.yml"]
3
- # texdocumentclass: ["review-jlreq", "media=print,paper=b5"]
4
- texdocumentclass: ["review-jlreq", "media=ebook,paper=b5"]
5
- # texdocumentclass: ["review-jlreq", "media=print,paper=b5,bleed_margin=3mm,cover=true,Q=14,startpage=3,serial_pagination=true,hiddenfolio=nikko-pc"]
3
+ # texdocumentclass: ["review-jlreq", "media=print,paper=b5j"]
4
+ texdocumentclass: ["review-jlreq", "media=ebook,paper=b5j"]
5
+ # texdocumentclass: ["review-jlreq", "media=print,paper=b5j,bleed_margin=3mm,cover=true,Q=14,startpage=3,serial_pagination=true,hiddenfolio=nikko-pc"]
@@ -47,7 +47,8 @@ texdocumentclass: ["review-jlreq", "クラスオプションたち(省略可
47
47
  利用可能な特定の用紙サイズを指定できます。[デフォルト]は a5 です。
48
48
 
49
49
  * `a0` 〜 `a10`:A 列
50
- * `b0` 〜 `b10`:JIS B 列
50
+ * `b0j` 〜 `b10j`:JIS B 列
51
+ * `b0` 〜 `b10`:ISO B 列
51
52
  * `c0` 〜 `c8`:C 列
52
53
  * `a4var`:210mm x 283mm
53
54
  * `b5var`:182mm x 230mm
@@ -57,6 +58,8 @@ texdocumentclass: ["review-jlreq", "クラスオプションたち(省略可
57
58
  * `hagaki`:葉書き、100mm x 148mm
58
59
  * `{横幅,縦幅}`:任意の指定サイズ
59
60
 
61
+ 日本の B 列サイズにするには `b5j` のように j 付きで指定することに注意してください。
62
+
60
63
  ### トンボ用紙サイズ `tombopaper=<用紙サイズ>` および塗り足し幅 `bleed_margin=<幅>`
61
64
 
62
65
  `tombopaper` ではトンボ用紙サイズを指定できます。
@@ -202,6 +202,11 @@
202
202
  \def\reviewinsert#1{#1}
203
203
  \def\reviewstrike#1{#1}
204
204
  \def\reviewunderline#1{#1}
205
+ \def\reviewtt#1{#1}
206
+ \def\reviewcode#1{#1}
207
+ \def\reviewtti#1{#1}
208
+ \def\reviewttb#1{#1}
209
+ \let\reviewicon\@gobble
205
210
  }
206
211
  \newif\ifreview@ba@break
207
212
  \def\review@ba@end{\review@ba@end@}
@@ -247,10 +252,10 @@
247
252
  \review@ba@breaktrue
248
253
  \review@break@all@a
249
254
  }
250
- \DeclareRobustCommand{\reviewtt}[1]{{\ttfamily\reviewbreakall{#1}}}
251
- \DeclareRobustCommand{\reviewcode}[1]{{\ttfamily\reviewbreakall{#1}}}
252
- \DeclareRobustCommand{\reviewtti}[1]{{\ttfamily\itshape\reviewbreakall{#1}}}
253
- \DeclareRobustCommand{\reviewttb}[1]{{\ttfamily\bfseries\reviewbreakall{#1}}}
255
+ \DeclareRobustCommand{\reviewtt}[1]{{\frenchspacing\ttfamily\reviewbreakall{#1}}}
256
+ \DeclareRobustCommand{\reviewcode}[1]{{\frenchspacing\ttfamily\reviewbreakall{#1}}}
257
+ \DeclareRobustCommand{\reviewtti}[1]{{\frenchspacing\ttfamily\itshape\reviewbreakall{#1}}}
258
+ \DeclareRobustCommand{\reviewttb}[1]{{\frenchspacing\ttfamily\bfseries\reviewbreakall{#1}}}
254
259
 
255
260
  \DeclareRobustCommand{\reviewbou}[1]{\kenten{#1}}
256
261
 
@@ -277,6 +277,11 @@
277
277
  \def\reviewinsert#1{#1}
278
278
  \def\reviewstrike#1{#1}
279
279
  \def\reviewunderline#1{#1}
280
+ \def\reviewtt#1{#1}
281
+ \def\reviewcode#1{#1}
282
+ \def\reviewtti#1{#1}
283
+ \def\reviewttb#1{#1}
284
+ \let\reviewicon\@gobble
280
285
  }
281
286
  \newif\ifreview@ba@break
282
287
  \def\review@ba@end{\review@ba@end@}
@@ -322,10 +327,10 @@
322
327
  \review@ba@breaktrue
323
328
  \review@break@all@a
324
329
  }
325
- \DeclareRobustCommand{\reviewtt}[1]{{\ttfamily\reviewbreakall{#1}}}
326
- \DeclareRobustCommand{\reviewcode}[1]{{\ttfamily\reviewbreakall{#1}}}
327
- \DeclareRobustCommand{\reviewtti}[1]{{\ttfamily\itshape\reviewbreakall{#1}}}
328
- \DeclareRobustCommand{\reviewttb}[1]{{\ttfamily\bfseries\reviewbreakall{#1}}}
330
+ \DeclareRobustCommand{\reviewtt}[1]{{\frenchspacing\ttfamily\reviewbreakall{#1}}}
331
+ \DeclareRobustCommand{\reviewcode}[1]{{\frenchspacing\ttfamily\reviewbreakall{#1}}}
332
+ \DeclareRobustCommand{\reviewtti}[1]{{\frenchspacing\ttfamily\itshape\reviewbreakall{#1}}}
333
+ \DeclareRobustCommand{\reviewttb}[1]{{\frenchspacing\ttfamily\bfseries\reviewbreakall{#1}}}
329
334
 
330
335
  \DeclareRobustCommand{\reviewbou}[1]{\kenten{#1}}
331
336
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: review
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.8.0
4
+ version: 5.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - kmuto
@@ -9,8 +9,22 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2023-06-29 00:00:00.000000000 Z
12
+ date: 2024-10-29 00:00:00.000000000 Z
13
13
  dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: csv
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ">="
19
+ - !ruby/object:Gem::Version
20
+ version: '0'
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ version: '0'
14
28
  - !ruby/object:Gem::Dependency
15
29
  name: image_size
16
30
  requirement: !ruby/object:Gem::Requirement
@@ -25,6 +39,20 @@ dependencies:
25
39
  - - ">="
26
40
  - !ruby/object:Gem::Version
27
41
  version: '0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: nkf
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ type: :runtime
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
28
56
  - !ruby/object:Gem::Dependency
29
57
  name: rexml
30
58
  requirement: !ruby/object:Gem::Requirement
@@ -85,16 +113,16 @@ dependencies:
85
113
  name: mini_magick
86
114
  requirement: !ruby/object:Gem::Requirement
87
115
  requirements:
88
- - - ">="
116
+ - - "~>"
89
117
  - !ruby/object:Gem::Version
90
- version: '0'
118
+ version: 5.0.0
91
119
  type: :development
92
120
  prerelease: false
93
121
  version_requirements: !ruby/object:Gem::Requirement
94
122
  requirements:
95
- - - ">="
123
+ - - "~>"
96
124
  - !ruby/object:Gem::Version
97
- version: '0'
125
+ version: 5.0.0
98
126
  - !ruby/object:Gem::Dependency
99
127
  name: playwright-runner
100
128
  requirement: !ruby/object:Gem::Requirement
@@ -143,14 +171,14 @@ dependencies:
143
171
  requirements:
144
172
  - - "~>"
145
173
  - !ruby/object:Gem::Version
146
- version: 1.45.1
174
+ version: 1.65.1
147
175
  type: :development
148
176
  prerelease: false
149
177
  version_requirements: !ruby/object:Gem::Requirement
150
178
  requirements:
151
179
  - - "~>"
152
180
  - !ruby/object:Gem::Version
153
- version: 1.45.1
181
+ version: 1.65.1
154
182
  - !ruby/object:Gem::Dependency
155
183
  name: rubocop-performance
156
184
  requirement: !ruby/object:Gem::Requirement
@@ -333,6 +361,7 @@ files:
333
361
  - lib/review/book/base.rb
334
362
  - lib/review/book/bib.rb
335
363
  - lib/review/book/book_unit.rb
364
+ - lib/review/book/cache.rb
336
365
  - lib/review/book/chapter.rb
337
366
  - lib/review/book/image_finder.rb
338
367
  - lib/review/book/index.rb
@@ -620,7 +649,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
620
649
  - !ruby/object:Gem::Version
621
650
  version: '0'
622
651
  requirements: []
623
- rubygems_version: 3.4.14
652
+ rubygems_version: 3.2.33
624
653
  signing_key:
625
654
  specification_version: 4
626
655
  summary: 'Re:VIEW: a easy-to-use digital publishing system'