packages feed

Eq-1.0: EqManips/Renderer/RenderConf.hs

module EqManips.Renderer.RenderConf( confLoad
                                   , Conf( .. )
                                   , defaultRenderConf
                                   ) where

import Data.Char( isSpace )

data Conf = Conf
    { mulAsDot :: Bool
    , packNumVarMul :: Bool
    , noBigOpOverSize :: Bool
    , useUnicode :: Bool
    }

defaultRenderConf :: Conf
defaultRenderConf = Conf
    { mulAsDot = True
    , packNumVarMul = False
    , noBigOpOverSize = False
    , useUnicode = False
    }

keyParser :: [(String, Conf -> String -> Conf)]
keyParser =
    [ ("mulasdot"       , \c v -> c{ mulAsDot = permissiveBool v } )
    , ("packnumvarmul"  , \c v -> c{ packNumVarMul = permissiveBool v} )
    , ("nobigopoversize", \c v -> c{ noBigOpOverSize = permissiveBool v} )
    , ("use_unicode"    , \c v -> c{ useUnicode = permissiveBool v } )
    ]

trim :: String -> String
trim = f . f
   where f = reverse . dropWhile isSpace

permissiveBool :: String -> Bool
permissiveBool "1" = True
permissiveBool "yes" = True
permissiveBool "true" = True
permissiveBool "True" = True
permissiveBool _ = False

confRead :: String -> Conf -> Conf
confRead ('#':_) c = c
confRead s c = case lookup (trim key) keyParser of
        Just parser -> parser c $ trim value
        Nothing -> c
    where (key, value) = break ('=' ==) s

confLoad :: [String] -> Conf
confLoad = foldr confRead defaultRenderConf