feat: implement chapter_range_patterns
option
Effectively facilitates localization of simple chapter ranges. ref #247
This commit is contained in:
@@ -194,3 +194,6 @@ default_directory=~/
|
|||||||
#
|
#
|
||||||
# To not convert any of the range types, simply removed it from the list.
|
# To not convert any of the range types, simply removed it from the list.
|
||||||
chapter_ranges=openings:38869680,endings:38869680,ads:a5353580
|
chapter_ranges=openings:38869680,endings:38869680,ads:a5353580
|
||||||
|
# Add alternative lua patterns to identify begining's of simple chapter ranges (all but `ads`)
|
||||||
|
# Syntax: `{type}:{pattern}[,{patternN}][;{type}:{pattern}[,{patternN}]]`
|
||||||
|
chapter_range_patterns=openings:オープニング;endings:エンディング
|
||||||
|
@@ -111,6 +111,17 @@ function itable_slice(itable, start_pos, end_pos)
|
|||||||
return new_table
|
return new_table
|
||||||
end
|
end
|
||||||
|
|
||||||
|
---@generic T
|
||||||
|
---@param a T[]|nil
|
||||||
|
---@param b T[]|nil
|
||||||
|
---@return T[]
|
||||||
|
function itable_join(a, b)
|
||||||
|
local result = {}
|
||||||
|
if a then for _, value in ipairs(a) do result[#result + 1] = value end end
|
||||||
|
if b then for _, value in ipairs(b) do result[#result + 1] = value end end
|
||||||
|
return result
|
||||||
|
end
|
||||||
|
|
||||||
---@param target any[]
|
---@param target any[]
|
||||||
---@param source any[]
|
---@param source any[]
|
||||||
function itable_append(target, source)
|
function itable_append(target, source)
|
||||||
@@ -224,6 +235,7 @@ local defaults = {
|
|||||||
font_height_to_letter_width_ratio = 0.5,
|
font_height_to_letter_width_ratio = 0.5,
|
||||||
default_directory = '~/',
|
default_directory = '~/',
|
||||||
chapter_ranges = 'openings:38869680,endings:38869680,ads:a5353580',
|
chapter_ranges = 'openings:38869680,endings:38869680,ads:a5353580',
|
||||||
|
chapter_range_patterns = 'openings:オープニング;endings:エンディング',
|
||||||
}
|
}
|
||||||
local options = table_shallow_copy(defaults)
|
local options = table_shallow_copy(defaults)
|
||||||
opt.read_options(options, 'uosc')
|
opt.read_options(options, 'uosc')
|
||||||
@@ -339,16 +351,28 @@ local config = {
|
|||||||
end
|
end
|
||||||
end)(),
|
end)(),
|
||||||
chapter_ranges = (function()
|
chapter_ranges = (function()
|
||||||
---@type table<string, {color: string; opacity: number}>
|
---@type table<string, string[]> Alternative patterns.
|
||||||
|
local alt_patterns = {}
|
||||||
|
if options.chapter_range_patterns and options.chapter_range_patterns ~= '' then
|
||||||
|
for _, definition in ipairs(split(options.chapter_range_patterns, ';+ *')) do
|
||||||
|
local name_patterns = split(definition, ' *:')
|
||||||
|
local name, patterns = name_patterns[1], name_patterns[2]
|
||||||
|
if name and patterns then alt_patterns[name] = split(patterns, ',') end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
---@type table<string, {color: string; opacity: number; patterns?: string[]}>
|
||||||
local ranges = {}
|
local ranges = {}
|
||||||
if options.chapter_ranges and options.chapter_ranges ~= '' then
|
if options.chapter_ranges and options.chapter_ranges ~= '' then
|
||||||
for _, definition in ipairs(split(options.chapter_ranges or '', ' *,+ *')) do
|
for _, definition in ipairs(split(options.chapter_ranges, ' *,+ *')) do
|
||||||
local name_color = split(definition, ' *:+ *')
|
local name_color = split(definition, ' *:+ *')
|
||||||
local name, color = name_color[1], name_color[2]
|
local name, color = name_color[1], name_color[2]
|
||||||
if name and color
|
if name and color
|
||||||
and name:match('^[a-zA-Z0-9_]+$') and color:match('^[a-fA-F0-9]+$')
|
and name:match('^[a-zA-Z0-9_]+$') and color:match('^[a-fA-F0-9]+$')
|
||||||
and (#color == 6 or #color == 8) then
|
and (#color == 6 or #color == 8) then
|
||||||
ranges[name_color[1]] = serialize_rgba(name_color[2])
|
local range = serialize_rgba(name_color[2])
|
||||||
|
range.patterns = alt_patterns[name]
|
||||||
|
ranges[name_color[1]] = range
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -843,6 +867,12 @@ function serialize_chapter_ranges(normalized_chapters)
|
|||||||
}
|
}
|
||||||
local sponsor_ranges = {}
|
local sponsor_ranges = {}
|
||||||
|
|
||||||
|
-- Extend with alt patterns
|
||||||
|
for _, meta in ipairs(simple_ranges) do
|
||||||
|
local alt_patterns = config.chapter_ranges[meta.name] and config.chapter_ranges[meta.name].patterns
|
||||||
|
if alt_patterns then meta.patterns = itable_join(meta.patterns, alt_patterns) end
|
||||||
|
end
|
||||||
|
|
||||||
-- Clone chapters
|
-- Clone chapters
|
||||||
local chapters = {}
|
local chapters = {}
|
||||||
for i, normalized in ipairs(normalized_chapters) do chapters[i] = table_shallow_copy(normalized) end
|
for i, normalized in ipairs(normalized_chapters) do chapters[i] = table_shallow_copy(normalized) end
|
||||||
|
Reference in New Issue
Block a user