aboutsummaryrefslogtreecommitdiffstats
path: root/check-pretiming.lua
blob: c0a3ff5ea771ae02bb08fff25cb23d493bb27105 (plain) (blame)
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
75
76
77
78
79
80
81
82
83
84
85
86
87
script_name = "Check pre-timing"
script_description = "Put stuff in empty dialogue lines, so you can see subtitles.\nformerly known as A-B"
script_author = "garret"
script_version = "4.0.0"
script_namespace = "garret.a-b"

local haveDepCtrl, DependencyControl, depctrl = pcall(require, "l0.DependencyControl")
if haveDepCtrl then
    depctrl = DependencyControl {
        --feed="TODO",
    }
end

local function switch_indicator(i)
    if i == "a" then
        return "b"
    elseif i == "b" then
        return "a"
    end
end

local function strip_tags(text)
    return text:gsub("{[^}]-}","")
end

local function get_indicator(letter, actor)
    local indicator
    if actor == "" then
        indicator = letter
    else
    indicator = actor.." "..letter
    end
    return indicator
end

local function escape_pattern(txt)
    local magic_chars = "%^%$%(%)%%.%[%]%*%+%-%?"
    return txt:gsub("(["..magic_chars.."])", "%%%1")
end

local function main(sub, sel)
    local i = "a"
    for _,li in ipairs(sel) do
        local line = sub[li]
        local indicator = get_indicator(i, line.actor)

        if line.text == "" then
            line.text = indicator
        elseif strip_tags(line.text) == "" then
            line.text = line.text .. indicator -- apply tags
        end

        sub[li] = line
        i = switch_indicator(i)
    end
    aegisub.set_undo_point(script_name)
end

local function undo(sub, sel)
    local i = "a"
    for _,li in ipairs(sel) do
        local line = sub[li]
        local indicator = get_indicator(i, line.actor)

        if line.text == indicator then
            line.text = ""
        else
            local escaped = escape_pattern(indicator)
            line.text = line.text:gsub(escaped, "")
        end
        sub[li] = line
        i = switch_indicator(i)
    end
end

local macros = {
    {"Add indicators", script_description, main},
    {"Clean up","Gets rid of the indicators once you've adjusted the lines", undo}
}
if haveDepCtrl then
    depctrl:registerMacros(macros)
else
    for _,macro in ipairs(macros) do
        local name, desc, fun = unpack(macro)
        aegisub.register_macro(script_name .. '/' .. name, desc, fun)
    end
end