function tostr(t) local str = "" for k, v in next, t do if #str > 0 then str = str .. ", " end if type(k) == "number" then str = str .. "[" .. k .. "] = " else str = str .. tostring(k) .. " = " end if type(v) == "table" then str = str .. "{ " .. tostr(v) .. " }" else str = str .. tostring(v) end end return str end function sk_scrape_startcanvas(c, fileName) end function sk_scrape_endcanvas(c, fileName) end local effects = {} function count_fields(t) for k, v in next, t do effects[k] = (effects[k] or 0) + 1 end end local total_paints = 0; function sk_scrape_accumulate(t) if (t.paint) then total_paints = total_paints + 1 count_fields(t.paint:getEffects()) end end function sk_scrape_summarize() io.write("total paints ", total_paints, " ", tostr(effects), "\n"); end