| function sk_scrape_startcanvas(c, fileName) end | |
| function sk_scrape_endcanvas(c, fileName) end | |
| function classify_rrect(rrect) | |
| if (rrect:type() == "simple") then | |
| local x, y = rrect:radii(0) | |
| if (x == y) then | |
| return "simple_circle" | |
| else | |
| return "simple_oval" | |
| end | |
| elseif (rrect:type() == "complex") then | |
| local numNotSquare = 0 | |
| local rx, ry | |
| local same = true; | |
| local first_not_square_corner | |
| local last_not_square_corner | |
| for i = 1, 4 do | |
| local x, y = rrect:radii(i-1) | |
| if (x ~= 0 and y ~= 0) then | |
| if (numNotSquare == 0) then | |
| rx = x | |
| ry = y | |
| first_not_square_corner = i | |
| else | |
| last_not_square_corner = i | |
| if (rx ~= x or ry ~=y) then | |
| same = false | |
| end | |
| end | |
| numNotSquare = numNotSquare + 1 | |
| end | |
| end | |
| local numSquare = 4 - numNotSquare | |
| if (numSquare > 0 and same) then | |
| local corners = "corners" | |
| if (numSquare == 2) then | |
| if ((last_not_square_corner - 1 == first_not_square_corner) or | |
| (1 == first_not_square_corner and 4 == last_not_square_corner )) then | |
| corners = "adjacent_" .. corners | |
| else | |
| corners = "opposite_" .. corners | |
| end | |
| elseif (1 == numSquare) then | |
| corners = "corner" | |
| end | |
| if (rx == ry) then | |
| return "circles_with_" .. numSquare .. "_square_" .. corners | |
| else | |
| return "ovals_with_" .. numSquare .. "_square_" .. corners | |
| end | |
| end | |
| return "complex_unclassified" | |
| elseif (rrect:type() == "rect") then | |
| return "rect" | |
| elseif (rrect:type() == "oval") then | |
| local x, y = rrect:radii(0) | |
| if (x == y) then | |
| return "circle" | |
| else | |
| return "oval" | |
| end | |
| elseif (rrect:type() == "empty") then | |
| return "empty" | |
| else | |
| return "unknown" | |
| end | |
| end | |
| function print_classes(class_table) | |
| function sort_classes(a, b) | |
| return a.count > b.count | |
| end | |
| array = {} | |
| for k, v in pairs(class_table) do | |
| if (type(v) == "number") then | |
| array[#array + 1] = {class = k, count = v}; | |
| end | |
| end | |
| table.sort(array, sort_classes) | |
| local i | |
| for i = 1, #array do | |
| io.write(array[i].class, ": ", array[i].count, " (", array[i].count/class_table["total"] * 100, "%)\n"); | |
| end | |
| end | |
| function sk_scrape_accumulate(t) | |
| if (t.verb == "clipRRect") then | |
| local rrect = t.rrect | |
| table["total"] = (table["total"] or 0) + 1 | |
| local class = classify_rrect(rrect) | |
| table[class] = (table[class] or 0) + 1 | |
| end | |
| end | |
| function sk_scrape_summarize() | |
| print_classes(table) | |
| --[[ To use the web scraper comment out the above call to print_classes, run the code below, | |
| and in the aggregator pass agg_table to print_classes. | |
| for k, v in pairs(table) do | |
| if (type(v) == "number") then | |
| local t = "agg_table[\"" .. k .. "\"]" | |
| io.write(t, " = (", t, " or 0) + ", table[k], "\n" ); | |
| end | |
| end | |
| --]] | |
| end |