Ace Attorney Wiki
Advertisement

Module for searching and manipulating wikitables.


-- Table constructor

local p = {}

local function rowPositions(wikitable)
    local positions = {}
    local index = 1

    for pos = 1, string.len(wikitable) - 1 do
        if string.sub(wikitable, pos, pos + 1) == "|-" then
            positions[index] = pos
            index = index + 1
        end
    end

    positions[index] = string.len(wikitable) - 1

    return {positions, index - 1}
end

local function fetchRows(wikitable, firstRow, lastRow)
    local rowP = rowPositions(wikitable)[1]
    return string.sub(wikitable, rowP[firstRow], rowP[lastRow + 1])
end

local function fetchOneRow(wikitable, row)
    return fetchRows(wikitable, row, row)
end

function p.partialTable(frame)
    local wikitable = frame.args[1]
    local rowP = rowPositions(wikitable)[1]
    local length = rowPositions(wikitable)[2]
    local firstRow = math.max(frame.args[2], 1) or 1
    local lastRow = math.min(frame.args[3], length) or length
    local header = string.sub(wikitable, 1, rowP[1] - 1)
    local body = fetchRows(wikitable, firstRow, lastRow)
    return header .. body .. "}"
end

return p

--[[Category:Modules]]
Advertisement