filename = ""

function sk_scrape_startcanvas(c, fileName)
    filename = fileName
end

function sk_scrape_endcanvas(c, fileName)

end

LuaDoubleNearlyZero = 1.0 / bit32.lshift(1.0, 12)

function LuaDoubleNearlyEqual(a, b)
    return math.abs(a-b) <= LuaDoubleNearlyZero
end

function bounds(rect)
    local width  = rect.right  - rect.left
    local height = rect.bottom - rect.top

    return width, height
end

gradients = {}

i = 1

function sk_scrape_accumulate(t)
    local p = t.paint
    if p then
        local s = p:getShader()
        if s then
            local g = s:asAGradient()
            if g then
                gradients[i] = {}

                gradients[i].filename = filename

                local width, height = -1, -1
                if t.rect then
                    width, height = bounds(t.rect)
                elseif t.rrect then
                    width, height = bounds(t.rrect:rect())
                elseif t.path then
                    width, height = bounds(t.path:getBounds())
                end
                gradients[i].boundsWidth  = width
                gradients[i].boundsHeight = height

                gradients[i].colorCount = g.colorCount
                gradients[i].type       = g.type
                gradients[i].tile       = g.tile

                isEvenlySpaced = true
                for j = 1, g.colorCount, 1 do
                    if not LuaDoubleNearlyEqual(g.positions[j], (j-1)/(g.colorCount-1)) then
                        isEvenlySpaced = false
                    end
                end
                gradients[i].isEvenlySpaced = isEvenlySpaced

                numHardStops = 0
                for j = 2, g.colorCount, 1 do
                    if LuaDoubleNearlyEqual(g.positions[j], g.positions[j-1]) then
                        numHardStops = numHardStops + 1
                    end
                end
                gradients[i].numHardStops = numHardStops

                gradients[i].verb = t.verb
                
                gradients[i].positions = {}
                for j = 1, g.colorCount, 1 do
                    gradients[i].positions[j] = g.positions[j]
                end

                i = i + 1
            end
        end
    end
end

function sk_scrape_summarize()
    for k, v in pairs(gradients) do
        local pos = ""
        for j = 1, v.colorCount , 1 do
            pos = pos .. v.positions[j]
            if j ~= v.colorCount then
                pos = pos .. ","
            end
        end

        io.write(string.format("%s %d %s %s %d %d %s %d %d %s\n",
                                v.filename,
                                v.colorCount,
                                v.type,
                                v.tile,
                                tonumber(v.isEvenlySpaced and 1 or 0),
                                v.numHardStops,
                                v.verb,
                                v.boundsWidth,
                                v.boundsHeight,
                                pos))
    end
end