mirror of
https://github.com/IHaskell/IHaskell.git
synced 2025-04-16 11:26:08 +00:00
Removal of many flags and modes
This commit is contained in:
parent
0fe412c22c
commit
027184cabb
@ -5,7 +5,6 @@ module IHaskell.Flags (
|
||||
Args(..),
|
||||
LhsStyle(..),
|
||||
lhsStyleBird,
|
||||
NotebookFormat(..),
|
||||
parseFlags,
|
||||
help,
|
||||
) where
|
||||
@ -21,18 +20,12 @@ import IHaskell.Types
|
||||
data Args = Args IHaskellMode [Argument]
|
||||
deriving Show
|
||||
|
||||
data Argument = ServeFrom String -- ^ Which directory to serve notebooks from.
|
||||
| Extension String -- ^ An extension to load at startup.
|
||||
| ConfFile String -- ^ A file with commands to load at startup.
|
||||
data Argument = ConfFile String -- ^ A file with commands to load at startup.
|
||||
| OverwriteFiles -- ^ Present when output should overwrite existing files.
|
||||
| ConvertFrom String
|
||||
| ConvertTo String
|
||||
| ConvertFromFormat NotebookFormat
|
||||
| ConvertToFormat NotebookFormat
|
||||
| ConvertLhsStyle (LhsStyle String)
|
||||
| GhcLibDir String -- ^ Where to find the GHC libraries.
|
||||
| KernelDebug -- ^ Spew debugging output from the kernel.
|
||||
| Help -- ^ Display help text.
|
||||
| ConvertLhsStyle (LhsStyle String)
|
||||
deriving (Eq, Show)
|
||||
|
||||
data LhsStyle string = LhsStyle { lhsCodePrefix :: string -- ^ @>@
|
||||
@ -44,19 +37,12 @@ data LhsStyle string = LhsStyle { lhsCodePrefix :: string -- ^ @>@
|
||||
}
|
||||
deriving (Eq, Functor, Show)
|
||||
|
||||
data NotebookFormat = LhsMarkdown
|
||||
| IpynbFile
|
||||
deriving (Eq, Show)
|
||||
|
||||
-- Which mode IHaskell is being invoked in.
|
||||
-- `None` means no mode was specified.
|
||||
data IHaskellMode = ShowHelp String
|
||||
| InstallKernelSpec
|
||||
| Notebook
|
||||
| Console
|
||||
| ConvertLhs
|
||||
| Kernel (Maybe String)
|
||||
| View (Maybe ViewFormat) (Maybe String)
|
||||
deriving (Eq, Show)
|
||||
|
||||
-- | Given a list of command-line arguments, return the IHaskell mode and
|
||||
@ -97,34 +83,27 @@ ghcLibFlag = flagReq ["ghclib", "l"] (store GhcLibDir) "<path>" "Library directo
|
||||
|
||||
kernelDebugFlag :: Flag Args
|
||||
kernelDebugFlag = flagNone ["debug"] addDebug "Print debugging output from the kernel."
|
||||
where addDebug (Args mode prev) = Args mode (KernelDebug : prev)
|
||||
|
||||
universalFlags :: [Flag Args]
|
||||
universalFlags = [ flagReq ["extension", "e", "X"] (store Extension) "<ghc-extension>"
|
||||
"Extension to enable at start."
|
||||
, flagReq ["conf", "c"] (store ConfFile) "<rc.hs>"
|
||||
"File with commands to execute at start; replaces ~/.ihaskell/rc.hs."
|
||||
, flagHelpSimple (add Help)
|
||||
]
|
||||
where
|
||||
add flag (Args mode flags) = Args mode $ flag : flags
|
||||
addDebug (Args mode prev) = Args mode (KernelDebug : prev)
|
||||
|
||||
confFlag :: Flag Args
|
||||
confFlag = flagReq ["conf", "c"] (store ConfFile) "<rc.hs>"
|
||||
"File with commands to execute at start; replaces ~/.ihaskell/rc.hs."
|
||||
|
||||
helpFlag = flagHelpSimple (add Help)
|
||||
|
||||
add flag (Args mode flags) = Args mode $ flag : flags
|
||||
|
||||
store :: (String -> Argument) -> String -> Args -> Either String Args
|
||||
store constructor str (Args mode prev) = Right $ Args mode $ constructor str : prev
|
||||
|
||||
notebook :: Mode Args
|
||||
notebook = mode "notebook" (Args Notebook []) "Browser-based notebook interface." noArgs $
|
||||
flagReq ["serve","s"] (store ServeFrom) "<dir>" "Directory to serve notebooks from.":
|
||||
universalFlags
|
||||
|
||||
console :: Mode Args
|
||||
console = mode "console" (Args Console []) "Console-based interactive repl." noArgs universalFlags
|
||||
|
||||
installKernelSpec :: Mode Args
|
||||
installKernelSpec = mode "install" (Args InstallKernelSpec []) "Install the Jupyter kernelspec." noArgs []
|
||||
installKernelSpec =
|
||||
mode "install" (Args InstallKernelSpec []) "Install the Jupyter kernelspec." noArgs
|
||||
[ghcLibFlag, kernelDebugFlag, confFlag, helpFlag]
|
||||
|
||||
kernel :: Mode Args
|
||||
kernel = mode "kernel" (Args (Kernel Nothing) []) "Invoke the IHaskell kernel." kernelArg [ghcLibFlag, kernelDebugFlag]
|
||||
kernel = mode "kernel" (Args (Kernel Nothing) []) "Invoke the IHaskell kernel." kernelArg []
|
||||
where
|
||||
kernelArg = flagArg update "<json-kernel-file>"
|
||||
update filename (Args _ flags) = Right $ Args (Kernel $ Just filename) flags
|
||||
@ -133,37 +112,35 @@ convert :: Mode Args
|
||||
convert = mode "convert" (Args ConvertLhs []) description unnamedArg convertFlags
|
||||
where
|
||||
description = "Convert between Literate Haskell (*.lhs) and Ipython notebooks (*.ipynb)."
|
||||
convertFlags = universalFlags ++ [ flagReq ["input", "i"] (store ConvertFrom) "<file>"
|
||||
"File to read."
|
||||
, flagReq ["output", "o"] (store ConvertTo) "<file>"
|
||||
"File to write."
|
||||
, flagReq ["from", "f"] (storeFormat ConvertFromFormat)
|
||||
"lhs|ipynb" "Format of the file to read."
|
||||
, flagReq ["to", "t"] (storeFormat ConvertToFormat) "lhs|ipynb"
|
||||
"Format of the file to write."
|
||||
, flagNone ["force"] consForce
|
||||
"Overwrite existing files with output."
|
||||
, flagReq ["style", "s"] storeLhs "bird|tex"
|
||||
"Type of markup used for the literate haskell file"
|
||||
, flagNone ["bird"] (consStyle lhsStyleBird)
|
||||
"Literate haskell uses >"
|
||||
, flagNone ["tex"] (consStyle lhsStyleTex)
|
||||
"Literate haskell uses \\begin{code}"
|
||||
]
|
||||
convertFlags = [ flagReq ["input", "i"] (store ConvertFrom) "<file>" "File to read."
|
||||
, flagReq ["output", "o"] (store ConvertTo) "<file>" "File to write."
|
||||
, flagReq ["from", "f"] (storeFormat ConvertFromFormat) "lhs|ipynb"
|
||||
"Format of the file to read."
|
||||
, flagReq ["to", "t"] (storeFormat ConvertToFormat) "lhs|ipynb"
|
||||
"Format of the file to write."
|
||||
, flagNone ["force"] consForce "Overwrite existing files with output."
|
||||
, flagReq ["style", "s"] storeLhs "bird|tex"
|
||||
"Type of markup used for the literate haskell file"
|
||||
, flagNone ["bird"] (consStyle lhsStyleBird) "Literate haskell uses >"
|
||||
, flagNone ["tex"] (consStyle lhsStyleTex) "Literate haskell uses \\begin{code}"
|
||||
, helpFlag
|
||||
]
|
||||
|
||||
consForce (Args mode prev) = Args mode (OverwriteFiles : prev)
|
||||
unnamedArg = Arg (store ConvertFrom) "<file>" False
|
||||
consStyle style (Args mode prev) = Args mode (ConvertLhsStyle style : prev)
|
||||
|
||||
storeFormat constructor str (Args mode prev) = case toLower str of
|
||||
"lhs" -> Right $ Args mode $ constructor LhsMarkdown : prev
|
||||
"ipynb" -> Right $ Args mode $ constructor IpynbFile : prev
|
||||
_ -> Left $ "Unknown format requested: " ++ str
|
||||
storeFormat constructor str (Args mode prev) =
|
||||
case toLower str of
|
||||
"lhs" -> Right $ Args mode $ constructor LhsMarkdown : prev
|
||||
"ipynb" -> Right $ Args mode $ constructor IpynbFile : prev
|
||||
_ -> Left $ "Unknown format requested: " ++ str
|
||||
|
||||
storeLhs str previousArgs = case toLower str of
|
||||
"bird" -> success lhsStyleBird
|
||||
"tex" -> success lhsStyleTex
|
||||
_ -> Left $ "Unknown lhs style: " ++ str
|
||||
storeLhs str previousArgs =
|
||||
case toLower str of
|
||||
"bird" -> success lhsStyleBird
|
||||
"tex" -> success lhsStyleTex
|
||||
_ -> Left $ "Unknown lhs style: " ++ str
|
||||
where
|
||||
success lhsStyle = Right $ consStyle lhsStyle previousArgs
|
||||
|
||||
@ -171,39 +148,6 @@ lhsStyleBird, lhsStyleTex :: LhsStyle String
|
||||
lhsStyleBird = LhsStyle "> " "\n<< " "" "" "" ""
|
||||
lhsStyleTex = LhsStyle "" "" "\\begin{code}" "\\end{code}" "\\begin{verbatim}" "\\end{verbatim}"
|
||||
|
||||
|
||||
view :: Mode Args
|
||||
view =
|
||||
let empty = mode "view" (Args (View Nothing Nothing) []) "View IHaskell notebook." noArgs flags in
|
||||
empty {
|
||||
modeNames = ["view"],
|
||||
modeCheck =
|
||||
\a@(Args (View fmt file) _) ->
|
||||
if not (isJust fmt && isJust file)
|
||||
then Left "Syntax: IHaskell view <format> <name>[.ipynb]"
|
||||
else Right a,
|
||||
modeHelp = concat [
|
||||
"Convert an IHaskell notebook to another format.\n",
|
||||
"Notebooks are searched in the IHaskell directory and the current directory.\n",
|
||||
"Available formats are " ++ intercalate ", " (map show
|
||||
["pdf", "html", "ipynb", "markdown", "latex"]),
|
||||
"."
|
||||
],
|
||||
modeArgs = ([formatArg, filenameArg] ++ fst (modeArgs empty),
|
||||
snd $ modeArgs empty)
|
||||
|
||||
}
|
||||
where
|
||||
flags = [flagHelpSimple (add Help)]
|
||||
formatArg = flagArg updateFmt "<format>"
|
||||
filenameArg = flagArg updateFile "<name>[.ipynb]"
|
||||
updateFmt fmtStr (Args (View _ s) flags) =
|
||||
case readMay fmtStr of
|
||||
Just fmt -> Right $ Args (View (Just fmt) s) flags
|
||||
Nothing -> Left $ "Invalid format '" ++ fmtStr ++ "'."
|
||||
updateFile name (Args (View f _) flags) = Right $ Args (View f (Just name)) flags
|
||||
add flag (Args mode flags) = Args mode $ flag : flags
|
||||
|
||||
ihaskellArgs :: Mode Args
|
||||
ihaskellArgs =
|
||||
let descr = "Haskell for Interactive Computing."
|
||||
|
Loading…
x
Reference in New Issue
Block a user