158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerfunction string.startsWith(String,Start)
258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger   return string.sub(String,1,string.len(Start))==Start
358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerend
458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger
558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerfunction string.endsWith(String,End)
658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger   return End=='' or string.sub(String,-string.len(End))==End
758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerend
858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger
958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerlocal canvas = nil
1058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerlocal num_perspective_bitmaps = 0
1158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerlocal num_affine_bitmaps = 0
1258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerlocal num_scaled_bitmaps = 0
1358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerlocal num_translated_bitmaps = 0
1458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerlocal num_identity_bitmaps = 0
15e27eefc4844477cee5d32f51ab45ff62020cdb36Derek Sollenbergerlocal num_scaled_up = 0
16e27eefc4844477cee5d32f51ab45ff62020cdb36Derek Sollenbergerlocal num_scaled_down = 0
1758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger
1858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerfunction sk_scrape_startcanvas(c, fileName) 
1958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger  canvas = c
2058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerend
2158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger
2258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerfunction sk_scrape_endcanvas(c, fileName)
2358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger  canvas = nil
2458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerend
2558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger
2658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerfunction sk_scrape_accumulate(t)
2758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    -- dump the params in t, specifically showing the verb first, which we
2858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    -- then nil out so it doesn't appear in tostr()
2958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    if (string.startsWith(t.verb,"drawBitmap")) then
3058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger      matrix = canvas:getTotalMatrix()
3158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger      matrixType = matrix:getType()
3258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger      if matrixType.perspective then
3358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger        num_perspective_bitmaps = num_perspective_bitmaps + 1
3458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger      elseif matrixType.affine then
3558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger        num_affine_bitmaps = num_affine_bitmaps + 1
3658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger      elseif matrixType.scale then 
3758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger        num_scaled_bitmaps = num_scaled_bitmaps + 1
38e27eefc4844477cee5d32f51ab45ff62020cdb36Derek Sollenberger        if matrix:getScaleX() > 1 or matrix:getScaleY() > 1 then
39e27eefc4844477cee5d32f51ab45ff62020cdb36Derek Sollenberger          num_scaled_up = num_scaled_up + 1
40e27eefc4844477cee5d32f51ab45ff62020cdb36Derek Sollenberger        else
41e27eefc4844477cee5d32f51ab45ff62020cdb36Derek Sollenberger          num_scaled_down = num_scaled_down + 1
42e27eefc4844477cee5d32f51ab45ff62020cdb36Derek Sollenberger        end
4358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger      elseif matrixType.translate then
4458190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger        num_translated_bitmaps = num_translated_bitmaps + 1
4558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger      else
4658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger        num_identity_bitmaps = num_identity_bitmaps + 1
4758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger      end
4858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger    end
4958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerend
5058190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger
5158190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerfunction sk_scrape_summarize()
5258190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger  io.write( "identity = ", num_identity_bitmaps,
5358190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger            ", translated = ", num_translated_bitmaps, 
54e27eefc4844477cee5d32f51ab45ff62020cdb36Derek Sollenberger            ", scaled = ", num_scaled_bitmaps, " (up = ", num_scaled_up, "; down = ", num_scaled_down, ")",
5558190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger            ", affine = ", num_affine_bitmaps,
5658190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger            ", perspective = ", num_perspective_bitmaps,
5758190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger            "\n")
5858190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenbergerend
5958190644c30e1c4aa8e527f3503c58f841e0fcf3Derek Sollenberger
60