1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
--[[
Copyright: Ren Tatsumoto and contributors
License: GNU GPL, version 3 or later; http://www.gnu.org/licenses/gpl.html
Subtitle list remembers selected subtitle lines.
]]
local h = require('helpers')
local new_sub_list = function()
local subs_list = {}
local find_i = function(sub)
for i, v in ipairs(subs_list) do
if sub < v then
return i
end
end
return #subs_list + 1
end
local get_time = function(position)
local i = position == 'start' and 1 or #subs_list
return subs_list[i][position]
end
local get_text = function()
local speech = {}
for _, sub in ipairs(subs_list) do
table.insert(speech, sub['text'])
end
return table.concat(speech, ' ')
end
local get_n_text = function(sub, n_lines)
local speech = {}
local end_sub = sub
for _, v in ipairs(subs_list) do
if v['start'] - end_sub['end'] >= 20 then
break
end
if v >= sub and #speech < n_lines then
table.insert(speech, v['text'])
end_sub = v
end
end
return table.concat(speech, ' '), end_sub
end
local insert = function(sub)
if sub ~= nil and not h.contains(subs_list, sub) then
table.insert(subs_list, find_i(sub), sub)
return true
end
return false
end
local get_subs_list = function()
local copy = {}
for key, value in pairs(subs_list) do
copy[key] = value
end
return copy
end
return {
get_subs_list = get_subs_list,
get_time = get_time,
get_text = get_text,
get_n_text = get_n_text,
insert = insert,
is_empty = function()
return h.is_empty(subs_list)
end,
}
end
return {
new = new_sub_list,
}
|