1 function 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 19 end 20 21 local 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 ]] 34 function sk_scrape_startcanvas(c, fileName) 35 canvas = c 36 end 37 38 --[[ 39 Called when the current canvas is done drawing. 40 ]] 41 function sk_scrape_endcanvas(c, fileName) 42 canvas = nil 43 end 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 50 local gCounts = {} -- [fontID_pointsize] = [] unique glyphs 51 local gFirstGlyphs = {} 52 local gTotalCount = 0 53 54 function array_count(array) 55 local n = 0 56 for k in next, array do 57 n = n + 1 58 end 59 return n 60 end 61 62 function 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 88 end 89 90 --[[ 91 lua_pictures will call this function after all of the pictures have been 92 "accumulated". 93 ]] 94 function 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 ]] 105 end 106 107 function test_summary() 108 io.write("just testing test_summary\n") 109 end 110 111