123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- 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
|