hps-0.14: Graphics/PS/Statistics.hs
-- | 'Path' statistics.
module Graphics.PS.Statistics where
import Data.Monoid {- base -}
import Graphics.PS.Image
import Graphics.PS.Path
-- | Path statistics data type.
data Statistics = Statistics {nMoveTo :: Integer
,nLineTo :: Integer
,nCurveTo :: Integer
,nClosePath :: Integer
,nGlyph :: Integer
,nTransform :: Integer}
deriving (Eq,Show)
instance Monoid Statistics where
mempty = Statistics 0 0 0 0 0 0
mappend p q =
let (Statistics m1 l1 c1 f1 g1 t1) = p
(Statistics m2 l2 c2 f2 g2 t2) = q
in Statistics (m1+m2) (l1+l2) (c1+c2) (f1+f2) (g1+g2) (t1+t2)
-- | Determine number of path components of each type.
pathStatistics :: Path -> Statistics
pathStatistics path =
case path of
MoveTo _ -> Statistics 1 0 0 0 0 0
LineTo _ -> Statistics 0 1 0 0 0 0
CurveTo _ _ _ -> Statistics 0 0 1 0 0 0
ClosePath _ -> Statistics 0 0 0 1 0 0
Text _ s -> Statistics 0 0 0 0 (fromIntegral (length s)) 0
PTransform _ p -> Statistics 0 0 0 0 0 1 <> pathStatistics p
Join p1 p2 -> pathStatistics p1 <> pathStatistics p2
-- | Statistics for all 'paths' at 'Image'.
imageStatistics :: Image -> Statistics
imageStatistics = mconcat . map pathStatistics . paths