Files
gf-core/src/compiler/GF/Command/CommandInfo.hs
hallgren 32f18b515e GF shell: write_file now writes one tree per line
This compensates for other changes that removed line breaks.
Maybe it should have a -lines options like ps and rf?
2015-09-03 20:42:38 +00:00

62 lines
1.9 KiB
Haskell

module GF.Command.CommandInfo where
import GF.Command.Abstract(Option,Expr)
import qualified PGF as H(showExpr)
import qualified PGF.Internal as H(Literal(LStr),Expr(ELit)) ----
data CommandInfo m = CommandInfo {
exec :: [Option] -> [Expr] -> m CommandOutput,
synopsis :: String,
syntax :: String,
explanation :: String,
longname :: String,
options :: [(String,String)],
flags :: [(String,String)],
examples :: [(String,String)],
needsTypeCheck :: Bool
}
mapCommandExec f c = c { exec = \ opts ts -> f (exec c opts ts) }
--emptyCommandInfo :: CommandInfo env
emptyCommandInfo = CommandInfo {
exec = error "command not implemented",
synopsis = "",
syntax = "",
explanation = "",
longname = "",
options = [],
flags = [],
examples = [],
needsTypeCheck = True
}
--------------------------------------------------------------------------------
class Monad m => TypeCheckArg m where typeCheckArg :: Expr -> m Expr
--------------------------------------------------------------------------------
newtype CommandOutput = Piped {fromPipe :: ([Expr],String)} ---- errors, etc
-- ** Converting command output
fromStrings ss = Piped (map stringAsExpr ss, unlines ss)
fromExprs es = Piped (es,unlines (map (H.showExpr []) es))
fromString s = Piped ([stringAsExpr s], s)
pipeWithMessage es msg = Piped (es,msg)
pipeMessage msg = Piped ([],msg)
pipeExprs es = Piped (es,[]) -- only used in emptyCommandInfo
void = Piped ([],"")
stringAsExpr = H.ELit . H.LStr -- should be a pattern macro
-- ** Converting command input
toStrings = map showAsString
where
showAsString t = case t of
H.ELit (H.LStr s) -> s
_ -> "\n" ++ H.showExpr [] t ---newline needed in other cases than the first
-- ** Creating documentation
mkEx s = let (command,expl) = break (=="--") (words s) in (unwords command, unwords (drop 1 expl))