forked from GitHub/gf-core
68 lines
1.3 KiB
Haskell
68 lines
1.3 KiB
Haskell
module GF.Command.Abstract where
|
|
|
|
import PGF.Data
|
|
|
|
type Ident = String
|
|
|
|
type CommandLine = [Pipe]
|
|
|
|
type Pipe = [Command]
|
|
|
|
data Command
|
|
= Command Ident [Option] Argument
|
|
deriving (Eq,Ord,Show)
|
|
|
|
data Option
|
|
= OOpt Ident
|
|
| OFlag Ident Value
|
|
deriving (Eq,Ord,Show)
|
|
|
|
data Value
|
|
= VId Ident
|
|
| VInt Integer
|
|
| VStr String
|
|
deriving (Eq,Ord,Show)
|
|
|
|
data Argument
|
|
= ATree Tree
|
|
| ANoArg
|
|
| AMacro Ident
|
|
deriving (Eq,Ord,Show)
|
|
|
|
valIdOpts :: String -> String -> [Option] -> String
|
|
valIdOpts flag def opts = case valOpts flag (VId def) opts of
|
|
VId v -> v
|
|
_ -> def
|
|
|
|
valIntOpts :: String -> Integer -> [Option] -> Int
|
|
valIntOpts flag def opts = fromInteger $ case valOpts flag (VInt def) opts of
|
|
VInt v -> v
|
|
_ -> def
|
|
|
|
valStrOpts :: String -> String -> [Option] -> String
|
|
valStrOpts flag def opts = case valOpts flag (VStr def) opts of
|
|
VStr v -> v
|
|
_ -> def
|
|
|
|
valOpts :: String -> Value -> [Option] -> Value
|
|
valOpts flag def opts = case lookup flag flags of
|
|
Just v -> v
|
|
_ -> def
|
|
where
|
|
flags = [(f,v) | OFlag f v <- opts]
|
|
|
|
isOpt :: String -> [Option] -> Bool
|
|
isOpt o opts = elem o [x | OOpt x <- opts]
|
|
|
|
isFlag :: String -> [Option] -> Bool
|
|
isFlag o opts = elem o [x | OFlag x _ <- opts]
|
|
|
|
prOpt :: Option -> String
|
|
prOpt (OOpt i) = i ----
|
|
|
|
mkOpt :: String -> Option
|
|
mkOpt = OOpt
|
|
|
|
|
|
|