vivlio-starter-pdf 1.1.2 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +50 -0
- data/README.md +32 -28
- data/RELEASE_NOTE.md +39 -2
- data/exe/vivlio-starter-pdf +89 -31
- data/lib/vivlio_starter/cli/pdf/enhanced_provider.rb +10 -85
- data/lib/vivlio_starter/cli/pdf/outline_writer.rb +36 -23
- data/lib/vivlio_starter/cli/pdf/reader.rb +856 -232
- data/lib/vivlio_starter/cli/pdf/version.rb +1 -1
- data/vivlio-starter-pdf.gemspec +10 -17
- metadata +51 -17
- data/.ruby-version +0 -1
- data/Rakefile +0 -74
data/vivlio-starter-pdf.gemspec
CHANGED
|
@@ -8,32 +8,23 @@ Gem::Specification.new do |spec|
|
|
|
8
8
|
spec.authors = ["Atelier Mirai"]
|
|
9
9
|
spec.email = ["contact@atelier-mirai.net"]
|
|
10
10
|
|
|
11
|
-
spec.summary = "
|
|
12
|
-
spec.description = "
|
|
11
|
+
spec.summary = "Vivlio Starter の PDF のしおり付与と、PDF から Markdown への変換を行う拡張プラグイン"
|
|
12
|
+
spec.description = "Vivlio Starter の Enhanced Mode を提供する拡張プラグインです。HexaPDF で PDF にしおりを付け、" \
|
|
13
|
+
"PDF を Markdown へ変換します。スキャンした PDF は Tesseract で OCR し、画像は WebP で抽出します。" \
|
|
14
|
+
"ライセンスは AGPL-3.0 です。"
|
|
13
15
|
spec.homepage = "https://github.com/Atelier-Mirai/vivlio-starter-pdf"
|
|
14
16
|
spec.license = "AGPL-3.0-only"
|
|
15
17
|
spec.required_ruby_version = ">= 3.4.0"
|
|
16
18
|
|
|
17
|
-
# homepage_uri は spec.homepage から自動で作られる。metadata にも同じ URL を書くと
|
|
18
|
-
# rubygems.org はどちらか片方しか表示せず、gem build が警告を出す
|
|
19
19
|
spec.metadata["allowed_push_host"] = "https://rubygems.org"
|
|
20
20
|
spec.metadata["source_code_uri"] = "https://github.com/Atelier-Mirai/vivlio-starter-pdf"
|
|
21
21
|
spec.metadata["changelog_uri"] = "https://github.com/Atelier-Mirai/vivlio-starter-pdf/blob/master/CHANGELOG.md"
|
|
22
|
-
spec.
|
|
23
|
-
[vivlio-starter-pdf]
|
|
24
|
-
Enhanced Mode の OCR には外部ツール(tesseract / tesseract-lang / poppler / vips)が必要です。
|
|
25
|
-
vs doctor --fix
|
|
26
|
-
で本体側からまとめて導入できます(macOS / Homebrew)。
|
|
27
|
-
手動の場合: brew install tesseract tesseract-lang poppler vips
|
|
22
|
+
spec.metadata["rubygems_mfa_required"] = "false"
|
|
28
23
|
|
|
29
|
-
すでに導入済みの場合はこのメッセージを無視して構いません。
|
|
30
|
-
MESSAGE
|
|
31
|
-
|
|
32
|
-
# Specify which files should be added to the gem when it is released.
|
|
33
24
|
spec.files = Dir.chdir(__dir__) do
|
|
34
25
|
tracked = `git ls-files -z`.split("\x0").reject do |f|
|
|
35
26
|
(File.expand_path(f) == __FILE__) ||
|
|
36
|
-
f.start_with?(*%w[bin/ test/ spec/ features/ .git appveyor Gemfile])
|
|
27
|
+
f.start_with?(*%w[bin/ test/ spec/ features/ .git .rubocop.yml .ruby-version appveyor Gemfile Rakefile])
|
|
37
28
|
end
|
|
38
29
|
source_files = Dir.glob("lib/**/*.rb")
|
|
39
30
|
executables = Dir.glob("exe/*")
|
|
@@ -46,8 +37,10 @@ Gem::Specification.new do |spec|
|
|
|
46
37
|
spec.add_dependency "hexapdf", "~> 1.0"
|
|
47
38
|
spec.add_dependency "ruby-vips", "~> 2.2"
|
|
48
39
|
|
|
49
|
-
|
|
50
|
-
spec.add_development_dependency "minitest", "~> 5.
|
|
40
|
+
spec.add_development_dependency "minitest", ">= 5.20"
|
|
41
|
+
spec.add_development_dependency "minitest-mock", "~> 5.27"
|
|
51
42
|
spec.add_development_dependency "minitest-reporters", "~> 1.7"
|
|
52
43
|
spec.add_development_dependency "rake", "~> 13.1"
|
|
44
|
+
spec.add_development_dependency "prawn", "~> 2.5"
|
|
45
|
+
spec.add_development_dependency "rubocop", "~> 1.81"
|
|
53
46
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: vivlio-starter-pdf
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Atelier Mirai
|
|
@@ -41,16 +41,30 @@ dependencies:
|
|
|
41
41
|
name: minitest
|
|
42
42
|
requirement: !ruby/object:Gem::Requirement
|
|
43
43
|
requirements:
|
|
44
|
-
- - "
|
|
44
|
+
- - ">="
|
|
45
45
|
- !ruby/object:Gem::Version
|
|
46
46
|
version: '5.20'
|
|
47
47
|
type: :development
|
|
48
48
|
prerelease: false
|
|
49
49
|
version_requirements: !ruby/object:Gem::Requirement
|
|
50
50
|
requirements:
|
|
51
|
-
- - "
|
|
51
|
+
- - ">="
|
|
52
52
|
- !ruby/object:Gem::Version
|
|
53
53
|
version: '5.20'
|
|
54
|
+
- !ruby/object:Gem::Dependency
|
|
55
|
+
name: minitest-mock
|
|
56
|
+
requirement: !ruby/object:Gem::Requirement
|
|
57
|
+
requirements:
|
|
58
|
+
- - "~>"
|
|
59
|
+
- !ruby/object:Gem::Version
|
|
60
|
+
version: '5.27'
|
|
61
|
+
type: :development
|
|
62
|
+
prerelease: false
|
|
63
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
64
|
+
requirements:
|
|
65
|
+
- - "~>"
|
|
66
|
+
- !ruby/object:Gem::Version
|
|
67
|
+
version: '5.27'
|
|
54
68
|
- !ruby/object:Gem::Dependency
|
|
55
69
|
name: minitest-reporters
|
|
56
70
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -79,8 +93,37 @@ dependencies:
|
|
|
79
93
|
- - "~>"
|
|
80
94
|
- !ruby/object:Gem::Version
|
|
81
95
|
version: '13.1'
|
|
82
|
-
|
|
83
|
-
|
|
96
|
+
- !ruby/object:Gem::Dependency
|
|
97
|
+
name: prawn
|
|
98
|
+
requirement: !ruby/object:Gem::Requirement
|
|
99
|
+
requirements:
|
|
100
|
+
- - "~>"
|
|
101
|
+
- !ruby/object:Gem::Version
|
|
102
|
+
version: '2.5'
|
|
103
|
+
type: :development
|
|
104
|
+
prerelease: false
|
|
105
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
106
|
+
requirements:
|
|
107
|
+
- - "~>"
|
|
108
|
+
- !ruby/object:Gem::Version
|
|
109
|
+
version: '2.5'
|
|
110
|
+
- !ruby/object:Gem::Dependency
|
|
111
|
+
name: rubocop
|
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
|
113
|
+
requirements:
|
|
114
|
+
- - "~>"
|
|
115
|
+
- !ruby/object:Gem::Version
|
|
116
|
+
version: '1.81'
|
|
117
|
+
type: :development
|
|
118
|
+
prerelease: false
|
|
119
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
120
|
+
requirements:
|
|
121
|
+
- - "~>"
|
|
122
|
+
- !ruby/object:Gem::Version
|
|
123
|
+
version: '1.81'
|
|
124
|
+
description: Vivlio Starter の Enhanced Mode を提供する拡張プラグインです。HexaPDF で PDF にしおりを付け、PDF
|
|
125
|
+
を Markdown へ変換します。スキャンした PDF は Tesseract で OCR し、画像は WebP で抽出します。ライセンスは AGPL-3.0
|
|
126
|
+
です。
|
|
84
127
|
email:
|
|
85
128
|
- contact@atelier-mirai.net
|
|
86
129
|
executables:
|
|
@@ -88,12 +131,10 @@ executables:
|
|
|
88
131
|
extensions: []
|
|
89
132
|
extra_rdoc_files: []
|
|
90
133
|
files:
|
|
91
|
-
- ".ruby-version"
|
|
92
134
|
- CHANGELOG.md
|
|
93
135
|
- LICENSE
|
|
94
136
|
- README.md
|
|
95
137
|
- RELEASE_NOTE.md
|
|
96
|
-
- Rakefile
|
|
97
138
|
- exe/vivlio-starter-pdf
|
|
98
139
|
- lib/vivlio_starter/cli/pdf/enhanced_provider.rb
|
|
99
140
|
- lib/vivlio_starter/cli/pdf/log_helper.rb
|
|
@@ -110,14 +151,7 @@ metadata:
|
|
|
110
151
|
allowed_push_host: https://rubygems.org
|
|
111
152
|
source_code_uri: https://github.com/Atelier-Mirai/vivlio-starter-pdf
|
|
112
153
|
changelog_uri: https://github.com/Atelier-Mirai/vivlio-starter-pdf/blob/master/CHANGELOG.md
|
|
113
|
-
|
|
114
|
-
[vivlio-starter-pdf]
|
|
115
|
-
Enhanced Mode の OCR には外部ツール(tesseract / tesseract-lang / poppler / vips)が必要です。
|
|
116
|
-
vs doctor --fix
|
|
117
|
-
で本体側からまとめて導入できます(macOS / Homebrew)。
|
|
118
|
-
手動の場合: brew install tesseract tesseract-lang poppler vips
|
|
119
|
-
|
|
120
|
-
すでに導入済みの場合はこのメッセージを無視して構いません。
|
|
154
|
+
rubygems_mfa_required: 'false'
|
|
121
155
|
rdoc_options: []
|
|
122
156
|
require_paths:
|
|
123
157
|
- lib
|
|
@@ -132,7 +166,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
132
166
|
- !ruby/object:Gem::Version
|
|
133
167
|
version: '0'
|
|
134
168
|
requirements: []
|
|
135
|
-
rubygems_version: 4.0.
|
|
169
|
+
rubygems_version: 4.0.20
|
|
136
170
|
specification_version: 4
|
|
137
|
-
summary:
|
|
171
|
+
summary: Vivlio Starter の PDF のしおり付与と、PDF から Markdown への変換を行う拡張プラグイン
|
|
138
172
|
test_files: []
|
data/.ruby-version
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
4.0.6
|
data/Rakefile
DELETED
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require "bundler/gem_tasks"
|
|
4
|
-
require "rake/testtask"
|
|
5
|
-
|
|
6
|
-
# gemspec が Ruby 3.4 以上を謳う以上、それが本当かは実際に走らせないと分からない。
|
|
7
|
-
# `it`(暗黙ブロック引数)は 3.3 以下でも構文エラーにならず「it というメソッドの
|
|
8
|
-
# 呼び出し」として通り、実行時に NameError になる——静的解析では捕まらない。
|
|
9
|
-
SUPPORTED_RUBY_VERSIONS = %w[3.4.10 4.0.6].freeze
|
|
10
|
-
|
|
11
|
-
# 別の Ruby を子プロセスで起動する以上、親の bundler 環境は必ず捨てる。
|
|
12
|
-
# `bundle exec rake test` から呼ばれると、親(現在の Ruby)の bundler を
|
|
13
|
-
# 子(別の Ruby)が読みに行き、テストが始まる前に LoadError で落ちる。
|
|
14
|
-
# nil を渡すと、その環境変数は子から取り除かれる。
|
|
15
|
-
UNBUNDLED_ENV = {
|
|
16
|
-
"RUBYOPT" => nil, "RUBYLIB" => nil, "GEM_HOME" => nil, "GEM_PATH" => nil,
|
|
17
|
-
"BUNDLE_GEMFILE" => nil, "BUNDLE_BIN_PATH" => nil, "BUNDLER_VERSION" => nil,
|
|
18
|
-
"BUNDLER_SETUP" => nil
|
|
19
|
-
}.freeze
|
|
20
|
-
|
|
21
|
-
namespace :test do
|
|
22
|
-
# テストの実体。現在の Ruby で 1 回だけ走る(test:versions が各版でこれを呼ぶ)
|
|
23
|
-
Rake::TestTask.new(:current) do |t|
|
|
24
|
-
t.libs << "test"
|
|
25
|
-
t.libs << "lib"
|
|
26
|
-
t.test_files = FileList["test/**/*_test.rb"]
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
desc "対応する全 Ruby 版(#{SUPPORTED_RUBY_VERSIONS.join(' / ')})でテストする"
|
|
30
|
-
task :versions do
|
|
31
|
-
missing = SUPPORTED_RUBY_VERSIONS - `rbenv versions --bare`.split("\n")
|
|
32
|
-
unless missing.empty?
|
|
33
|
-
abort <<~MESSAGE
|
|
34
|
-
次の Ruby が rbenv に入っていません: #{missing.join(', ')}
|
|
35
|
-
#{missing.map { "rbenv install #{it}" }.join("\n ")}
|
|
36
|
-
MESSAGE
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
# 版ごとに bundle が要る。未導入なら黙って入れる(その版の初回だけ時間がかかる)
|
|
40
|
-
failed = SUPPORTED_RUBY_VERSIONS.reject do |version|
|
|
41
|
-
puts "\n=== Ruby #{version} ==="
|
|
42
|
-
env = UNBUNDLED_ENV.merge("RBENV_VERSION" => version)
|
|
43
|
-
|
|
44
|
-
unless system(env, "rbenv exec bundle check", out: File::NULL, err: File::NULL)
|
|
45
|
-
next false unless system(env, "rbenv exec bundle install --quiet")
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
system(env, "rbenv exec bundle exec rake test:current")
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
abort "\n失敗した Ruby: #{failed.join(', ')}" unless failed.empty?
|
|
52
|
-
puts "\n全 Ruby 版で通過: #{SUPPORTED_RUBY_VERSIONS.join(' / ')}"
|
|
53
|
-
end
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
# 手元では常に対応全版を回す(1 版あたり 10 秒弱で終わるため、分けるほどの負担にならない)。
|
|
57
|
-
# CI(GitHub Actions)は版をマトリクスで分担するので、各ジョブは 1 回でよい。
|
|
58
|
-
task test: (ENV["CI"] ? "test:current" : "test:versions")
|
|
59
|
-
task default: :test
|
|
60
|
-
|
|
61
|
-
# gem のアンインストール → ビルド → インストールを一括実行
|
|
62
|
-
task :reinstall do
|
|
63
|
-
gemspec = Dir['*.gemspec'].first
|
|
64
|
-
raise 'gemspec が見つかりません' unless gemspec
|
|
65
|
-
|
|
66
|
-
require_relative 'lib/vivlio_starter/cli/pdf/version'
|
|
67
|
-
version = VivlioStarter::Pdf::VERSION
|
|
68
|
-
gem_name = 'vivlio-starter-pdf'
|
|
69
|
-
gem_file = "#{gem_name}-#{version}.gem"
|
|
70
|
-
|
|
71
|
-
sh "gem uninstall #{gem_name} --version #{version} --executables --ignore-dependencies 2>/dev/null || true"
|
|
72
|
-
sh "gem build #{gemspec}"
|
|
73
|
-
sh "gem install #{gem_file}"
|
|
74
|
-
end
|