amakanize 0.6.5 → 0.8.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 +5 -5
- data/.github/release.yml +23 -0
- data/.github/workflows/bump-request.yml +26 -0
- data/.github/workflows/github-label-sync.yml +18 -0
- data/.github/workflows/release.yml +12 -0
- data/.github/workflows/test.yml +27 -0
- data/.gitignore +0 -1
- data/.rubocop.yml +3 -73
- data/CHANGELOG.md +4 -0
- data/Gemfile +7 -1
- data/Gemfile.lock +58 -0
- data/README.md +2 -4
- data/Rakefile +10 -3
- data/amakanize.gemspec +13 -15
- data/lib/amakanize/author_name.rb +4 -2
- data/lib/amakanize/author_names.rb +5 -5
- data/lib/amakanize/book_position.rb +4 -2
- data/lib/amakanize/filterable.rb +5 -3
- data/lib/amakanize/filters/base_filter.rb +2 -0
- data/lib/amakanize/filters/book_position_at_end_detection_filter.rb +8 -8
- data/lib/amakanize/filters/book_position_clearing_filter.rb +5 -5
- data/lib/amakanize/filters/book_position_in_bracket_detection_filter.rb +8 -8
- data/lib/amakanize/filters/book_position_in_words_detection_filter.rb +8 -8
- data/lib/amakanize/filters/book_position_number_canonicalization_filter.rb +5 -5
- data/lib/amakanize/filters/brackets_normalization_filter.rb +4 -2
- data/lib/amakanize/filters/continuous_spaces_normalization_filter.rb +4 -2
- data/lib/amakanize/filters/dash_between_alphabets_normalization_filter.rb +4 -2
- data/lib/amakanize/filters/html_unescape_filter.rb +5 -3
- data/lib/amakanize/filters/hyphen_minus_normalization_filter.rb +4 -2
- data/lib/amakanize/filters/normalization_filter.rb +4 -3
- data/lib/amakanize/filters/obvious_volume_number_deletion_filter.rb +7 -5
- data/lib/amakanize/filters/parentheses_deletion_filter.rb +4 -2
- data/lib/amakanize/filters/role_name_deletion_filter.rb +9 -7
- data/lib/amakanize/filters/space_between_exclamation_and_bracket_deletion_filter.rb +4 -2
- data/lib/amakanize/filters/space_deletion_filter.rb +4 -2
- data/lib/amakanize/filters/spaces_between_exclamations_deletion_filter.rb +4 -2
- data/lib/amakanize/filters/strip_filter.rb +4 -2
- data/lib/amakanize/filters/trailing_author_name_payload_deletion_filter.rb +6 -4
- data/lib/amakanize/filters/trailing_dash_deletion_filter.rb +6 -4
- data/lib/amakanize/filters/trailing_double_parentheses_singlization_filter.rb +6 -4
- data/lib/amakanize/filters/trailing_parentheses_deletion_filter.rb +5 -5
- data/lib/amakanize/filters/trailing_series_name_payload_deletion_filter.rb +5 -3
- data/lib/amakanize/filters/trailing_symbol_deletion_filter.rb +6 -4
- data/lib/amakanize/filters/trailing_volume_number_deletion_filter.rb +5 -5
- data/lib/amakanize/filters/video_position_detection_filter.rb +10 -9
- data/lib/amakanize/filters/video_position_number_conversion_filter.rb +115 -113
- data/lib/amakanize/series_name.rb +4 -2
- data/lib/amakanize/version.rb +3 -1
- data/lib/amakanize/video_position.rb +4 -2
- data/lib/amakanize.rb +41 -39
- metadata +11 -62
@@ -1,5 +1,7 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'amakanize/filters/base_filter'
|
4
|
+
require 'cgi'
|
3
5
|
|
4
6
|
module Amakanize
|
5
7
|
module Filters
|
@@ -10,7 +12,7 @@ module Amakanize
|
|
10
12
|
def call(context:, output:)
|
11
13
|
{
|
12
14
|
context: context,
|
13
|
-
output: ::CGI.unescapeHTML(output)
|
15
|
+
output: ::CGI.unescapeHTML(output)
|
14
16
|
}
|
15
17
|
end
|
16
18
|
end
|
@@ -1,4 +1,6 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'amakanize/filters/base_filter'
|
2
4
|
|
3
5
|
module Amakanize
|
4
6
|
module Filters
|
@@ -10,7 +12,7 @@ module Amakanize
|
|
10
12
|
def call(context:, output:)
|
11
13
|
{
|
12
14
|
context: context,
|
13
|
-
output: output.tr(
|
15
|
+
output: output.tr('‐', '-')
|
14
16
|
}
|
15
17
|
end
|
16
18
|
end
|
@@ -1,5 +1,6 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'amakanize/filters/base_filter'
|
3
4
|
|
4
5
|
module Amakanize
|
5
6
|
module Filters
|
@@ -10,7 +11,7 @@ module Amakanize
|
|
10
11
|
def call(context:, output:)
|
11
12
|
{
|
12
13
|
context: context,
|
13
|
-
output:
|
14
|
+
output: output.unicode_normalize(:nfkc)
|
14
15
|
}
|
15
16
|
end
|
16
17
|
end
|
@@ -1,4 +1,6 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'amakanize/filters/base_filter'
|
2
4
|
|
3
5
|
module Amakanize
|
4
6
|
module Filters
|
@@ -9,9 +11,9 @@ module Amakanize
|
|
9
11
|
/\s+#{::Amakanize::PATTERN_OF_VOLUME_PREFIX}#{::Amakanize::PATTERN_OF_NUMERIC_CHARACTERS}\s+.*/,
|
10
12
|
/\s+Lv\.?\s*#{::Amakanize::PATTERN_OF_NUMERIC_CHARACTERS}(?:\s+.*|\z)/,
|
11
13
|
/\s*\(#{::Amakanize::PATTERN_OF_VOLUME_PREFIX}?#{::Amakanize::PATTERN_OF_NUMERIC_CHARACTERS}\).*/,
|
12
|
-
%r
|
14
|
+
%r{\s*\d+年\s*\d+\s*(?:月|/\d+\s*)号.*},
|
13
15
|
/\s*\d{4}\s*(?:AUTUMN|SPRING|SUMMER|WINTER)/,
|
14
|
-
/\s*\d+年\s*\d+\s
|
16
|
+
/\s*\d+年\s*\d+\s*号.*/
|
15
17
|
)
|
16
18
|
|
17
19
|
# @note Override
|
@@ -21,12 +23,12 @@ module Amakanize
|
|
21
23
|
unless context[:volume_number_removed]
|
22
24
|
output = output.sub(PATTERN) do
|
23
25
|
context[:volume_number_removed] = true
|
24
|
-
|
26
|
+
''
|
25
27
|
end
|
26
28
|
end
|
27
29
|
{
|
28
30
|
context: context,
|
29
|
-
output: output
|
31
|
+
output: output
|
30
32
|
}
|
31
33
|
end
|
32
34
|
end
|
@@ -1,4 +1,6 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'amakanize/filters/base_filter'
|
2
4
|
|
3
5
|
module Amakanize
|
4
6
|
module Filters
|
@@ -9,7 +11,7 @@ module Amakanize
|
|
9
11
|
def call(context:, output:)
|
10
12
|
{
|
11
13
|
context: context,
|
12
|
-
output: output.gsub(/\((\d+)\)/, '\1')
|
14
|
+
output: output.gsub(/\((\d+)\)/, '\1')
|
13
15
|
}
|
14
16
|
end
|
15
17
|
end
|
@@ -1,17 +1,19 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'amakanize/filters/base_filter'
|
2
4
|
|
3
5
|
module Amakanize
|
4
6
|
module Filters
|
5
7
|
class RoleNameDeletionFilter < ::Amakanize::Filters::BaseFilter
|
6
8
|
PATTERN_OF_ROLE_NAME = ::Regexp.union(
|
7
|
-
%w
|
9
|
+
%w[
|
8
10
|
イラスト
|
9
11
|
カバーデザイン
|
10
12
|
キャラクター原案
|
11
13
|
原作
|
12
14
|
原案
|
13
15
|
漫画
|
14
|
-
|
16
|
+
]
|
15
17
|
)
|
16
18
|
|
17
19
|
# @note Override
|
@@ -21,10 +23,10 @@ module Amakanize
|
|
21
23
|
{
|
22
24
|
context: context,
|
23
25
|
output: output
|
24
|
-
.gsub(%r
|
25
|
-
.gsub(%r
|
26
|
-
.gsub(/\A\(#{PATTERN_OF_ROLE_NAME}(?:・#{PATTERN_OF_ROLE_NAME})*\)/,
|
27
|
-
.gsub(/\(#{PATTERN_OF_ROLE_NAME}(?:・#{PATTERN_OF_ROLE_NAME})*\)\z/,
|
26
|
+
.gsub(%r{\A#{PATTERN_OF_ROLE_NAME}[:/]}, '')
|
27
|
+
.gsub(%r{[:/]#{PATTERN_OF_ROLE_NAME}\z}, '')
|
28
|
+
.gsub(/\A\(#{PATTERN_OF_ROLE_NAME}(?:・#{PATTERN_OF_ROLE_NAME})*\)/, '')
|
29
|
+
.gsub(/\(#{PATTERN_OF_ROLE_NAME}(?:・#{PATTERN_OF_ROLE_NAME})*\)\z/, '')
|
28
30
|
}
|
29
31
|
end
|
30
32
|
end
|
@@ -1,4 +1,6 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'amakanize/filters/base_filter'
|
2
4
|
|
3
5
|
module Amakanize
|
4
6
|
module Filters
|
@@ -9,7 +11,7 @@ module Amakanize
|
|
9
11
|
def call(context:, output:)
|
10
12
|
{
|
11
13
|
context: context,
|
12
|
-
output: output.gsub(/!\s+」/,
|
14
|
+
output: output.gsub(/!\s+」/, '!」')
|
13
15
|
}
|
14
16
|
end
|
15
17
|
end
|
@@ -1,4 +1,6 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'amakanize/filters/base_filter'
|
2
4
|
|
3
5
|
module Amakanize
|
4
6
|
module Filters
|
@@ -9,7 +11,7 @@ module Amakanize
|
|
9
11
|
def call(context:, output:)
|
10
12
|
{
|
11
13
|
context: context,
|
12
|
-
output: output.gsub(/\s+/,
|
14
|
+
output: output.gsub(/\s+/, '')
|
13
15
|
}
|
14
16
|
end
|
15
17
|
end
|
@@ -1,4 +1,6 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'amakanize/filters/base_filter'
|
2
4
|
|
3
5
|
module Amakanize
|
4
6
|
module Filters
|
@@ -9,7 +11,7 @@ module Amakanize
|
|
9
11
|
def call(context:, output:)
|
10
12
|
{
|
11
13
|
context: context,
|
12
|
-
output: output.gsub(/!\s+!/,
|
14
|
+
output: output.gsub(/!\s+!/, '!!')
|
13
15
|
}
|
14
16
|
end
|
15
17
|
end
|
@@ -1,4 +1,6 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'amakanize/filters/base_filter'
|
2
4
|
|
3
5
|
module Amakanize
|
4
6
|
module Filters
|
@@ -9,7 +11,7 @@ module Amakanize
|
|
9
11
|
def call(context:, output:)
|
10
12
|
{
|
11
13
|
context: context,
|
12
|
-
output: output.strip
|
14
|
+
output: output.strip
|
13
15
|
}
|
14
16
|
end
|
15
17
|
end
|
@@ -1,16 +1,18 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'amakanize/filters/base_filter'
|
2
4
|
|
3
5
|
module Amakanize
|
4
6
|
module Filters
|
5
7
|
class TrailingAuthorNamePayloadDeletionFilter < ::Amakanize::Filters::BaseFilter
|
6
|
-
PAYLOADS = %w
|
8
|
+
PAYLOADS = %w[
|
7
9
|
その他
|
8
10
|
ほか
|
9
11
|
他
|
10
12
|
原作
|
11
13
|
原案
|
12
14
|
漫画
|
13
|
-
|
15
|
+
].freeze
|
14
16
|
|
15
17
|
# @note Override
|
16
18
|
# @param output [String] e.g. `"ハノカゲ ほか"`
|
@@ -18,7 +20,7 @@ module Amakanize
|
|
18
20
|
def call(context:, output:)
|
19
21
|
{
|
20
22
|
context: context,
|
21
|
-
output: output.gsub(/\s+#{::Regexp.union(PAYLOADS)}\z/,
|
23
|
+
output: output.gsub(/\s+#{::Regexp.union(PAYLOADS)}\z/, '')
|
22
24
|
}
|
23
25
|
end
|
24
26
|
end
|
@@ -1,9 +1,11 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'amakanize/filters/base_filter'
|
2
4
|
|
3
5
|
module Amakanize
|
4
6
|
module Filters
|
5
7
|
class TrailingDashDeletionFilter < ::Amakanize::Filters::BaseFilter
|
6
|
-
TOKENS = %w
|
8
|
+
TOKENS = %w[
|
7
9
|
̃
|
8
10
|
̰
|
9
11
|
̴
|
@@ -20,7 +22,7 @@ module Amakanize
|
|
20
22
|
~
|
21
23
|
∼
|
22
24
|
─
|
23
|
-
|
25
|
+
].freeze
|
24
26
|
|
25
27
|
# @note Override
|
26
28
|
# @param output [String] e.g. `"アド・アストラ 1 ─スキピオとハンニバル─"`
|
@@ -28,7 +30,7 @@ module Amakanize
|
|
28
30
|
def call(context:, output:)
|
29
31
|
{
|
30
32
|
context: context,
|
31
|
-
output: output.gsub(/\s*#{::Regexp.union(TOKENS)}.*/,
|
33
|
+
output: output.gsub(/\s*#{::Regexp.union(TOKENS)}.*/, '')
|
32
34
|
}
|
33
35
|
end
|
34
36
|
end
|
@@ -1,4 +1,6 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'amakanize/filters/base_filter'
|
2
4
|
|
3
5
|
module Amakanize
|
4
6
|
module Filters
|
@@ -9,9 +11,9 @@ module Amakanize
|
|
9
11
|
def call(context:, output:)
|
10
12
|
{
|
11
13
|
context: context,
|
12
|
-
output: output.sub(/\([
|
13
|
-
"(
|
14
|
-
end
|
14
|
+
output: output.sub(/\([^(^)]+?\([^(]+?\)[^)^(]+?\)\z/) do
|
15
|
+
"(#{::Regexp.last_match(0).gsub(/[()]/, '')})"
|
16
|
+
end
|
15
17
|
}
|
16
18
|
end
|
17
19
|
end
|
@@ -1,4 +1,6 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'amakanize/filters/base_filter'
|
2
4
|
|
3
5
|
module Amakanize
|
4
6
|
module Filters
|
@@ -7,12 +9,10 @@ module Amakanize
|
|
7
9
|
# @param output [String] e.g. `"魔法使いの嫁 通常版 4 (BLADE COMICS)"`
|
8
10
|
# @return [Hash] e.g. `"魔法使いの嫁 通常版 4"`
|
9
11
|
def call(context:, output:)
|
10
|
-
unless context[:volume_number_removed]
|
11
|
-
output = output.sub(/\s*\([^\(]+\)\z/, "")
|
12
|
-
end
|
12
|
+
output = output.sub(/\s*\([^(]+\)\z/, '') unless context[:volume_number_removed]
|
13
13
|
{
|
14
14
|
context: context,
|
15
|
-
output: output
|
15
|
+
output: output
|
16
16
|
}
|
17
17
|
end
|
18
18
|
end
|
@@ -1,4 +1,6 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'amakanize/filters/base_filter'
|
2
4
|
|
3
5
|
module Amakanize
|
4
6
|
module Filters
|
@@ -6,7 +8,7 @@ module Amakanize
|
|
6
8
|
PAYLOADS = %w(
|
7
9
|
通常版
|
8
10
|
(未分類)
|
9
|
-
)
|
11
|
+
).freeze
|
10
12
|
|
11
13
|
# @note Override
|
12
14
|
# @param output [String] e.g. `"魔法使いの嫁 通常版"`
|
@@ -14,7 +16,7 @@ module Amakanize
|
|
14
16
|
def call(context:, output:)
|
15
17
|
{
|
16
18
|
context: context,
|
17
|
-
output: output.gsub(/\s+#{::Regexp.union(PAYLOADS)}\z/,
|
19
|
+
output: output.gsub(/\s+#{::Regexp.union(PAYLOADS)}\z/, '')
|
18
20
|
}
|
19
21
|
end
|
20
22
|
end
|
@@ -1,16 +1,18 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'amakanize/filters/base_filter'
|
2
4
|
|
3
5
|
module Amakanize
|
4
6
|
module Filters
|
5
7
|
class TrailingSymbolDeletionFilter < ::Amakanize::Filters::BaseFilter
|
6
|
-
PATTERN = /\s*[-:]\z
|
8
|
+
PATTERN = /\s*[-:]\z/.freeze
|
7
9
|
|
8
10
|
# @note Override
|
9
11
|
def call(context:, output:)
|
10
|
-
output = output.gsub(PATTERN,
|
12
|
+
output = output.gsub(PATTERN, '')
|
11
13
|
{
|
12
14
|
context: context,
|
13
|
-
output: output
|
15
|
+
output: output
|
14
16
|
}
|
15
17
|
end
|
16
18
|
end
|
@@ -1,4 +1,6 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'amakanize/filters/base_filter'
|
2
4
|
|
3
5
|
module Amakanize
|
4
6
|
module Filters
|
@@ -7,12 +9,10 @@ module Amakanize
|
|
7
9
|
# @param output [String] e.g. `"やはり俺の青春ラブコメはまちがっている。4"`, `"ネトゲの嫁は女の子じゃないと思った? Lv.2"`
|
8
10
|
# @return [Hash] e.g. `"やはり俺の青春ラブコメはまちがっている。"`, `"ネトゲの嫁は女の子じゃないと思った?"`
|
9
11
|
def call(context:, output:)
|
10
|
-
if !context[:volume_number_removed] && !output.match(/[^\s]Lv\.?\s*#{Amakanize::PATTERN_OF_NUMERIC_CHARACTERS}\z/i)
|
11
|
-
output = output.sub(/,?\s*#{PATTERN_OF_VOLUME_PREFIX}?#{Amakanize::PATTERN_OF_NUMERIC_CHARACTERS}(?:話|巻|版)?(?:\s*\(.*?\))?\z/, "")
|
12
|
-
end
|
12
|
+
output = output.sub(/,?\s*#{PATTERN_OF_VOLUME_PREFIX}?#{Amakanize::PATTERN_OF_NUMERIC_CHARACTERS}(?:話|巻|版)?(?:\s*\(.*?\))?\z/, '') if !context[:volume_number_removed] && !output.match(/[^\s]Lv\.?\s*#{Amakanize::PATTERN_OF_NUMERIC_CHARACTERS}\z/i)
|
13
13
|
{
|
14
14
|
context: context,
|
15
|
-
output: output
|
15
|
+
output: output
|
16
16
|
}
|
17
17
|
end
|
18
18
|
end
|
@@ -1,4 +1,6 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'amakanize/filters/base_filter'
|
2
4
|
|
3
5
|
module Amakanize
|
4
6
|
module Filters
|
@@ -7,16 +9,15 @@ module Amakanize
|
|
7
9
|
# @param output [String] e.g. `"第1話「でじこだにょ」/第2話「ぷちこと一緒かにょ?」"`
|
8
10
|
# @return [Hash] e.g. `"1"`
|
9
11
|
def call(context:, output:)
|
10
|
-
output =
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
end
|
12
|
+
output = if output.match(/#{::Amakanize::PATTERN_OF_VOLUME_PREFIX}(#{PATTERN_OF_NUMERIC_CHARACTERS})/)
|
13
|
+
::Regexp.last_match(1)
|
14
|
+
else
|
15
|
+
''
|
16
|
+
end
|
17
|
+
|
17
18
|
{
|
18
19
|
context: context,
|
19
|
-
output: output
|
20
|
+
output: output
|
20
21
|
}
|
21
22
|
end
|
22
23
|
end
|