import Text.Printf edge = 28.223 :: Double spacing = 32 :: Double gap = spacing - edge across = [("light", "left"), ("dark", "right"), ("dark", "left"), ("light", "right")] down = ["king", "queen", "bishop", "knight", "rook", "pawn"] useElement :: Double -> Double -> String -> String -> String -> String useElement x y side kind place = printf format name x y edge edge x y name where format = "\n" ++ "" name = side ++ "_" ++ kind ++ "_" ++ place main = do putStr $ unlines $ concat $ flip map (zip [5*spacing,4*spacing..] down) $ \(y, kind) -> flip map (zip [0,spacing..] across) $ \(x, (side, place)) -> useElement x y side kind place putStr " printf "M%0.3f %0.3fH%0.3f" (0 - gap/2) (row*spacing-(gap/2)) (4*spacing - gap/2) putStr $ flip concatMap [0..4] $ \col -> printf "M%0.3f %0.3fV%0.3f" (col*spacing-(gap/2)) (0 - gap/2) (6*spacing - gap/2) putStrLn "\"/>" printf "viewBox=\"%.3f %0.3f %.3f %.3f\"\n" (0-spacing) (0-gap) (6*spacing + 2*gap) (6*spacing + 2*gap)