Home | History | Annotate | Download | only in lua
      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