|  | 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 | 
|  |  |