Index: tools/lua/classify_rrect_clips.lua |
diff --git a/tools/lua/classify_rrect_clips.lua b/tools/lua/classify_rrect_clips.lua |
new file mode 100644 |
index 0000000000000000000000000000000000000000..792d169ab3985342019a0dbc94e707aed769c294 |
--- /dev/null |
+++ b/tools/lua/classify_rrect_clips.lua |
@@ -0,0 +1,109 @@ |
+ |
+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 |