packages feed

svg2q-0.3.1: Types.hs

module Types where

import Text.XML.Light.Types
import Data.List (groupBy, find)
import Debug.Trace (trace)
import Color
import Helpers (replace, clean)
import TextElement 
import Point
import PathCommand
import Data.Maybe (fromJust)

type Id = String

-- returns Just ID or Nothing, if supplied string is empty
getId :: Maybe String -> Maybe Id
getId s = s

-- key value pair - maybe Map would do the trick?
data KeyValuePair =
     KeyValuePair {
     key :: String
     , value :: String}
     deriving (Show, Eq)

getStringFromKVP :: String -> [KeyValuePair] -> Maybe String
getStringFromKVP s kvp = let sr = find (\x -> key x == s) kvp
                         in
                           if sr == Nothing
                           then Nothing
                           else Just $ value (fromJust sr)


-- key elements
data GraphicsElement = Rect {
     coordinate :: Point
     , width :: Float
     , height :: Float
     , rx :: Float
     , ry :: Float
     , fill :: Maybe Color
     , strokeWidth :: Float
     , stroke :: Maybe Color
     , id :: Maybe Id
     }
     | Circle {
     coordinate :: Point
     , radius :: Float
     , fill :: Maybe Color
     , strokeWidth :: Float
     , stroke :: Maybe Color
     , id :: Maybe Id
     }
     | Ellipse {
     coordinate :: Point
     , rx :: Float
     , ry :: Float
     , fill :: Maybe Color
     , strokeWidth :: Float
     , stroke :: Maybe Color
     , id :: Maybe Id
     }
     | Line {
     coordinateStart :: Point
     , coordinateStop :: Point
     , strokeWidth :: Float
     , stroke :: Maybe Color
     , id :: Maybe Id
     }
     | Group {
     gElements :: [GraphicsElement]
     , gId :: Maybe Id
     }
     | Description
     | Definition
     | Path {
     commands :: [PathCommand]
     , id :: Maybe Id
     , fill :: Maybe Color
     , strokeWidth :: Float
     , stroke :: Maybe Color
     }
     | TextElement {
     text :: TextElement
     , id :: Maybe Id
     }
     | NothingYet
     | SomethingNotSimple
     deriving (Show, Eq)



mkPolyline :: [Point] -> Maybe Color -> Float -> Maybe Color -> Maybe Id -> GraphicsElement
mkPolyline (fp:ps)
           fill
           strokewidth
           stroke
           id =
           Path (PathMoveTo fp:map PathLineTo ps)
                 id 
                 fill 
                 strokewidth 
                 stroke