Home | History | Annotate | Download | only in lua
      1 
      2 function sk_scrape_startcanvas(c, fileName) end
      3 
      4 function sk_scrape_endcanvas(c, fileName) end
      5 
      6 function classify_rrect(rrect)
      7     if (rrect:type() == "simple") then
      8         local x, y = rrect:radii(0)
      9         if (x == y) then
     10             return "simple_circle"
     11         else
     12             return "simple_oval"
     13         end
     14     elseif (rrect:type() == "complex") then
     15         local numNotSquare = 0
     16         local rx, ry
     17         local same = true;
     18         local first_not_square_corner
     19         local last_not_square_corner
     20         for i = 1, 4 do
     21             local x, y = rrect:radii(i-1)
     22             if (x ~= 0 and y ~= 0) then
     23                 if (numNotSquare == 0) then
     24                     rx = x
     25                     ry = y
     26                     first_not_square_corner = i
     27                 else
     28                    last_not_square_corner = i
     29                    if (rx ~= x or ry ~=y) then
     30                        same = false
     31                    end
     32                 end
     33                 numNotSquare = numNotSquare + 1
     34             end
     35         end
     36         local numSquare = 4 - numNotSquare
     37         if (numSquare > 0 and same) then
     38             local corners = "corners"
     39             if (numSquare == 2) then
     40                 if ((last_not_square_corner - 1 == first_not_square_corner) or
     41                     (1 == first_not_square_corner and 4 == last_not_square_corner )) then
     42                     corners = "adjacent_" .. corners
     43                 else
     44                     corners = "opposite_" .. corners
     45                 end
     46             elseif (1 == numSquare) then
     47                 corners = "corner"
     48             end
     49             if (rx == ry) then
     50                 return "circles_with_" .. numSquare .. "_square_" .. corners
     51             else
     52                 return "ovals_with_" .. numSquare .. "_square_" .. corners
     53             end
     54         end
     55         return "complex_unclassified"
     56     elseif (rrect:type() == "rect") then
     57         return "rect"
     58     elseif (rrect:type() == "oval") then
     59         local x, y = rrect:radii(0)
     60         if (x == y) then
     61             return "circle"
     62         else
     63             return "oval"
     64         end
     65     elseif (rrect:type() == "empty") then
     66         return "empty"
     67     else
     68         return "unknown"
     69     end
     70 end
     71 
     72 function print_classes(class_table)
     73   function sort_classes(a, b)
     74      return a.count > b.count
     75   end
     76   array = {}
     77   for k, v in pairs(class_table) do
     78       if (type(v) == "number") then
     79           array[#array + 1] = {class = k, count = v};
     80       end
     81   end
     82   table.sort(array, sort_classes)
     83   local i
     84   for i = 1, #array do
     85       io.write(array[i].class, ": ", array[i].count, " (", array[i].count/class_table["total"] * 100, "%)\n");
     86   end
     87 end
     88 
     89 function sk_scrape_accumulate(t)
     90     if (t.verb == "clipRRect") then
     91         local rrect = t.rrect
     92         table["total"] = (table["total"] or 0) + 1
     93         local class = classify_rrect(rrect)
     94         table[class] = (table[class] or 0) + 1
     95     end
     96 end
     97 
     98 function sk_scrape_summarize()
     99   print_classes(table)
    100   --[[ To use the web scraper comment out the above call to print_classes, run the code below,
    101        and in the aggregator pass agg_table to print_classes.
    102   for k, v in pairs(table) do
    103       if (type(v) == "number") then
    104           local t = "agg_table[\"" .. k .. "\"]"
    105           io.write(t, " = (", t, " or 0) + ", table[k], "\n" );
    106       end
    107   end
    108   --]]
    109 end
    110