110 lines
3.3 KiB
Lua
110 lines
3.3 KiB
Lua
|
|
||
|
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
|