mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-10 13:29:32 -06:00
This compensates for other changes that removed line breaks. Maybe it should have a -lines options like ps and rf?
62 lines
1.9 KiB
Haskell
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))
|