--- factorcss/CSS.hs 2004/12/19 22:10:41 61 +++ factorcss/CSS.hs 2005/02/27 13:53:48 73 @@ -1,7 +1,15 @@ +-- +-- This file is part of FactorCSS +-- Licensed under the MIT License, +-- http://www.opensource.org/licenses/mit-license +-- Copyright 2005 James Bursa +-- + -- Datatypes for CSS module CSS where import List +import Numeric data Stylesheet = Stylesheet @@ -62,6 +70,19 @@ deriving Show +is_ruleset :: Statement -> Bool +is_ruleset (Ruleset sels decls) = True +is_ruleset _ = False + +is_media :: Statement -> Bool +is_media (Media media stmts) = True +is_media _ = False + +is_page :: Statement -> Bool +is_page (Page page decls) = True +is_page _ = False + + show_stylesheet :: Stylesheet -> [String] show_stylesheet (Stylesheet c is ss) = show_charset c ++ map show_import (reverse is) ++ @@ -77,12 +98,20 @@ show_statement :: Statement -> String show_statement (Ruleset ss ds) = - (concat . intersperse ", " . map show_selector) ss ++ + show_selectors ss ++ " { " ++ (concat . intersperse "; " . map show_declaration) ds ++ " }" +show_statement (Media media stmts) = + "@media " ++ (concat . intersperse ", ") media ++ + " {\n" ++ + (unlines . map ('\t':) . map show_statement) stmts ++ + "}" show_statement z = "(statement)" +show_selectors :: [Selector] -> String +show_selectors = concat . intersperse ", " . map show_selector + show_selector :: Selector -> String show_selector [] = "" show_selector ((ss, c):zs) = show_simple_selector ss ++ @@ -91,6 +120,7 @@ show_simple_selector :: SimpleSelector -> String show_simple_selector (Just s, ds) = s ++ (concat . map show_detail) ds +show_simple_selector (Nothing, []) = "*" show_simple_selector (Nothing, ds) = (concat . map show_detail) ds show_detail :: Detail -> String @@ -117,11 +147,11 @@ show_values = concat . intersperse " " . map show_value show_value :: Value -> String -show_value (Number n) = show n -show_value (Percentage p) = show p ++ "%" +show_value (Number n) = showFFloat Nothing n "" +show_value (Percentage p) = showFFloat Nothing p "%" show_value (Length l) = l -show_value (Ems e) = show e ++ "em" -show_value (Exs x) = show x ++ "ex" +show_value (Ems e) = showFFloat Nothing e "em" +show_value (Exs x) = showFFloat Nothing x "ex" show_value (Angle a) = a show_value (Time t) = t show_value (Freq f) = f