packages feed

mediawiki2latex-7.6: src/ImperativeState.hs

module ImperativeState where
import Data.Map
import Control.Monad.State
import Control.Monad.Error
import UrlAnalyse
import Control.Concurrent.MVar
import Data.List
 
data MyError = DownloadError String String
             | OtherError String
             | WikiUrlParseError String
             | NotImplementedError
             | NotExcatlyOneError String
             | NotIntegerError String
             | NotAtMostOneError String
             | ToManyOptionsError
             | PaperError
 
instance Error MyError where
        noMsg = OtherError "A String Error!"
        strMsg s = OtherError s
 
instance Show MyError where
        show (DownloadError theLemma theUrl)
          = "Error downloading the lemma \"" ++
              theLemma ++ "\" form the url \"" ++ theUrl ++ "\""
        show (WikiUrlParseError theUrl)
          = "Error: The supplied url " ++ theUrl ++ " could not be parsed"
        show NotImplementedError
          = "Error: The requested feature is not implemented yet"
        show PaperError
          = "Error: The option paper may only be one of A4,A5,B5,letter,legal,executive"
        show ToManyOptionsError
          = "Error: at most one of the options --internal --templates --message --html may be given"
        show (NotExcatlyOneError msg)
          = "Error: The option --" ++
              msg ++ " has to be present exactly once in the command line"
        show (NotAtMostOneError msg)
          = "Error: The option --" ++
              msg ++ " can only be present at most once in the command line"
        show (NotIntegerError msg)
          = "Error: The option --" ++
              msg ++ " could not be parsed as an integer."
        show (OtherError msg) = msg
 
data Contributor = Contributor{name :: String, edits :: Integer,
                               href :: String}
                 deriving (Eq, Ord, Show, Read)
 
myplus :: Contributor -> Contributor -> Contributor
myplus x y = x{edits = (edits x) + (edits y)}
 
contribsum :: [Map String Contributor] -> Map String Contributor
contribsum x = Data.List.foldl (unionWith myplus) Data.Map.empty x
 
imperativeStateZero :: ImperativeState
imperativeStateZero
  = ImperativeState{audict = [], fullUrl = fullWikiUrlZero,
                    tmpPath = ""}
 
data ImperativeState = ImperativeState{audict ::
                                       [MVar (Map String Contributor)],
                                       fullUrl :: FullWikiUrl, tmpPath :: String}
 
type ImperativeMonad = ErrorT MyError (StateT ImperativeState IO)
 
data RunMode = HTML
             | ExpandedTemplates
             | StandardTemplates
             | UserTemplateFile String
             deriving (Show, Read)
 
data SourceMode = Included
                | Excluded
                deriving (Show, Read)
 
data FullConfig = FullConfig{resolution :: Integer,
                             outputFilename :: String, inputUrl :: String, runMode :: RunMode,
                             paper :: String, vector :: Bool, copy :: Maybe String,
                             mainPath :: String, server :: Maybe Int}
                deriving (Show, Read)