1function tostr(t) 2 local str = "" 3 for k, v in next, t do 4 if #str > 0 then 5 str = str .. ", " 6 end 7 if type(k) == "number" then 8 str = str .. "[" .. k .. "] = " 9 else 10 str = str .. tostring(k) .. " = " 11 end 12 if type(v) == "table" then 13 str = str .. "{ " .. tostr(v) .. " }" 14 else 15 str = str .. tostring(v) 16 end 17 end 18 return str 19end 20 21local canvas -- holds the current canvas (from startcanvas()) 22 23--[[ 24 startcanvas() is called at the start of each picture file, passing the 25 canvas that we will be drawing into, and the name of the file. 26 27 Following this call, there will be some number of calls to accumulate(t) 28 where t is a table of parameters that were passed to that draw-op. 29 30 t.verb is a string holding the name of the draw-op (e.g. "drawRect") 31 32 when a given picture is done, we call endcanvas(canvas, fileName) 33]] 34function sk_scrape_startcanvas(c, fileName) 35 canvas = c 36end 37 38--[[ 39 Called when the current canvas is done drawing. 40]] 41function sk_scrape_endcanvas(c, fileName) 42 canvas = nil 43end 44 45--[[ 46 Called with the parameters to each canvas.draw call, where canvas is the 47 current canvas as set by startcanvas() 48]] 49 50local gCounts = {} -- [fontID_pointsize] = [] unique glyphs 51local gFirstGlyphs = {} 52local gTotalCount = 0 53 54function array_count(array) 55 local n = 0 56 for k in next, array do 57 n = n + 1 58 end 59 return n 60end 61 62function sk_scrape_accumulate(t) 63 verb = t.verb; 64 if verb == "drawPosText" or verb == "drawPosTextH" then 65 if t.glyphs then 66 local key = array_count(t.glyphs) 67 local n = gCounts[key] 68 if n then 69 gCounts[key] = n + 1 70 else 71 gCounts[key] = 1 72 end 73 74 if key == 1 then 75 local first = t.glyphs[1]; 76 local n = gFirstGlyphs[first] 77 if n then 78 n = n + 1 79 else 80 n = 0 81 end 82 gFirstGlyphs[first] = n 83 end 84 85 gTotalCount = gTotalCount + 1 86 end 87 end 88end 89 90--[[ 91 lua_pictures will call this function after all of the pictures have been 92 "accumulated". 93]] 94function sk_scrape_summarize() 95 for k, v in next, gCounts do 96 io.write("glyph_count ", k, ",frequency ", v * 100 / gTotalCount, "\n") 97 end 98 99--[[ 100 io.write("\n\nFirst glyph spread\n\n") 101 for k, v in next, gFirstGlyphs do 102 io.write("glyph, ", k, ",count, ", v, "\n") 103 end 104]] 105end 106 107function test_summary() 108 io.write("just testing test_summary\n") 109end 110 111