Tämän moduulin ohjeistuksen voi tehdä sivulle Moduuli:Polku/ohje

local export = {}

function export.getRelativePathTo(from, to)
    local fromList = mw.text.split(from, "/")
    local toList = mw.text.split(to, "/")
    local toListLeft = mw.text.split(to, "/")

    local fromListLenLeft = #fromList

    local l = math.min(#fromList, #toList)
    for i = 1, l do
        assert(fromList[i] ~= "", "Tyhjä arvo lähdepolussa")
        assert(toList[i] ~= "", "Tyhjä arvo kohdepolussa")

        if fromList[i] ~= toList[i] then
            break
        end

        table.remove(toListLeft, 1)
        fromListLenLeft = fromListLenLeft - 1
    end

    if fromListLenLeft == 0 and #toListLeft == 0 then
    	assert(#toList > 0, "kohdepolku on tyhjä")
    	assert(toList[#toList] ~= nil, "kohde on tyhjä")
        return toList[#toList]
    end

    local pathUp = string.rep("../", fromListLenLeft - 1)

    if #toListLeft == 0 then
        return pathUp .. ".."
    end

    return pathUp .. table.concat(toListLeft, "/")
end

return export