summaryrefslogtreecommitdiffstats
path: root/scripts/lib/common.lua
blob: 80b81ba96a8ad33ace01a5016a079f259c25123c (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
function dump(o)
    if type(o) == 'table' then
        local s = '{ '
        for k, v in pairs(o) do
            if type(k) ~= 'number' then k = '"' .. k .. '"' end
            s = s .. '[' .. k .. '] = ' .. dump(v) .. ','
        end
        return s .. '} '
    else
        return tostring(o)
    end
end

function string.split(str, sep)
    sep = sep or '%s'

    local parts = pandoc.List()

    for field, s in str:gmatch("([^" .. sep .. "]*)(" .. sep .. "?)") do
        parts:insert(field)
        if s == "" then return parts end
    end
end

function pandoc.List:flatten()
    local result = pandoc.List()

    for i = 1, #self do result:extend(self[i]) end

    return result
end

function pandoc.List:flatMap(fn)
    local mapped = self:map(fn)
    local result = pandoc.List()

    for i = 1, #mapped do result:extend(mapped[i]) end

    return result
end

function pandoc.List:take(n)
    if n >= #self then return self end

    local result = pandoc.List()

    for i = 1, n do result:insert(self[i]) end

    return result
end

return {
    dump = dump
}