Created
August 20, 2024 10:36
-
-
Save noteed/c82bba778f5a3403e62da73894352886 to your computer and use it in GitHub Desktop.
Word-break
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html lang="en"> | |
<head> | |
<meta charset="UTF-8"> | |
<title>/home/thu/projects/slab/src/Slab/Command.hs</title> | |
<meta name="colorscheme" content="wildcharm"></meta> | |
<style> | |
* {font-family: monospace} | |
body {background-color: #ffffff; color: #000000; margin:0px; padding:0px; margin-top: 13.5px; margin-left: -0.5px;} | |
.String {color: #0000c0} | |
.hsImportModuleName {} | |
.Statement {color: #c00000} | |
.Special {color: #8700ff} | |
.hsImportGroup {} | |
.Constant {color: #0000c0} | |
.hsDelimiter {} | |
.PreProc {color: #c000c0} | |
.Comment {color: #6c6c6c} | |
.ConId {} | |
.VarId {} | |
.hsImportList {} | |
.Type {color: #c00000} | |
.Todo {background-color: #ffff00; color: #000000} | |
pre {margin: 0px; width: 93.10ch; white-space: pre-wrap; word-break: break-all; padding: 0px; font-size:11.5px; letter-spacing: 0.08px; } | |
</style> | |
</head> | |
<body> | |
<pre> | |
<span class="Special">{-# LANGUAGE ApplicativeDo #-}</span> | |
<span class="Comment">-- |</span> | |
<span class="Comment">-- Module : Slab.Command</span> | |
<span class="Comment">-- Description : Command-line interface to Slab</span> | |
<span class="Comment">--</span> | |
<span class="Comment">-- @Slab.Command@ provides a command line interface for the Slab program.</span> | |
<span class="Comment">--</span> | |
<span class="Comment">-- Commands and options are defined by parsers written using the</span> | |
<span class="Comment">-- @optparse-applicative@ library.</span> | |
<span class="Comment">--</span> | |
<span class="Comment">-- The implementation of each command can be found in the "Slab.Run" module.</span> | |
<span class="Type">module</span> <span class="ConId">Slab.Command</span> | |
<span class="hsDelimiter">(</span> <span class="ConId">Command</span> <span class="hsDelimiter">(</span><span class="Statement">..</span><span class="hsDelimiter">)</span> | |
<span class="hsDelimiter">,</span> <span class="ConId">CommandWithPath</span> <span class="hsDelimiter">(</span><span class="Statement">..</span><span class="hsDelimiter">)</span> | |
<span class="hsDelimiter">,</span> <span class="ConId">RenderMode</span> <span class="hsDelimiter">(</span><span class="Statement">..</span><span class="hsDelimiter">)</span> | |
<span class="hsDelimiter">,</span> <span class="ConId">ParseMode</span> <span class="hsDelimiter">(</span><span class="Statement">..</span><span class="hsDelimiter">)</span> | |
<span class="hsDelimiter">,</span> <span class="ConId">RunMode</span> <span class="hsDelimiter">(</span><span class="Statement">..</span><span class="hsDelimiter">)</span> | |
<span class="hsDelimiter">,</span> <span class="VarId">parserInfo</span> | |
<span class="hsDelimiter">)</span> <span class="Type">where</span> | |
<span class="PreProc">import</span><span class="hsImportGroup"> </span><span class="hsImportModuleName">Data.Text</span><span class="hsImportGroup"> </span><span class="hsDelimiter">(</span><span class="ConId">Text</span><span class="hsDelimiter">)</span> | |
<span class="PreProc">import</span><span class="hsImportGroup"> </span><span class="hsImportModuleName">Data.Version</span><span class="hsImportGroup"> </span><span class="hsDelimiter">(</span><span class="VarId">showVersion</span><span class="hsDelimiter">)</span> | |
<span class="PreProc">import</span><span class="hsImportGroup"> </span><span class="hsImportModuleName">Options.Applicative</span><span class="hsImportGroup"> </span><span class="hsDelimiter">((</span><span class="hsImportList"><**></span><span class="hsDelimiter">))</span> | |
<span class="PreProc">import</span><span class="hsImportGroup"> </span><span class="hsImportModuleName">Options.Applicative</span><span class="hsImportGroup"> </span><span class="PreProc">qualified</span><span class="hsImportGroup"> </span><span class="PreProc">as</span><span class="hsImportGroup"> </span><span class="hsImportModuleName">A</span> | |
<span class="PreProc">import</span><span class="hsImportGroup"> </span><span class="hsImportModuleName">Paths</span><span class="hsImportGroup">_slab </span><span class="hsDelimiter">(</span><span class="VarId">version</span><span class="hsDelimiter">)</span> | |
<span class="Comment">--------------------------------------------------------------------------------</span> | |
<span class="Type">data</span> <span class="ConId">Command</span> | |
<span class="Statement">=</span> <span class="ConId">Build</span> <span class="ConId">FilePath</span> <span class="ConId">RenderMode</span> <span class="ConId">RunMode</span> <span class="ConId">FilePath</span> | |
<span class="Statement">|</span> <span class="ConId">Watch</span> <span class="ConId">FilePath</span> <span class="ConId">RenderMode</span> <span class="ConId">RunMode</span> <span class="ConId">FilePath</span> | |
<span class="Statement">|</span> <span class="ConId">Serve</span> <span class="ConId">FilePath</span> <span class="ConId">FilePath</span> | |
<span class="Statement">|</span> <span class="ConId">ReportPages</span> <span class="ConId">FilePath</span> | |
<span class="Statement">|</span> <span class="ConId">ReportHeadings</span> <span class="ConId">FilePath</span> | |
<span class="Statement">|</span> <span class="Comment">-- | Return the content of element matching the provided ID.</span> | |
<span class="ConId">ReportElement</span> <span class="ConId">Text</span> <span class="ConId">FilePath</span> | |
<span class="Statement">|</span> <span class="Comment">-- | Generate code. Only Haskell for now.</span> | |
<span class="ConId">Generate</span> <span class="ConId">FilePath</span> | |
<span class="Statement">|</span> <span class="ConId">CommandWithPath</span> <span class="ConId">FilePath</span> <span class="ConId">ParseMode</span> <span class="ConId">CommandWithPath</span> | |
<span class="Comment">-- | Commands operating on a path.</span> | |
<span class="Type">data</span> <span class="ConId">CommandWithPath</span> | |
<span class="Statement">=</span> <span class="ConId">Render</span> <span class="ConId">RenderMode</span> <span class="ConId">RunMode</span> | |
<span class="Statement">|</span> <span class="Comment">-- | If True, simplify the evaluated AST.</span> | |
<span class="ConId">Execute</span> <span class="ConId">Bool</span> <span class="ConId">RunMode</span> | |
<span class="Statement">|</span> <span class="Comment">-- | If True, simplify the evaluated AST.</span> | |
<span class="ConId">Evaluate</span> <span class="ConId">Bool</span> | |
<span class="Statement">|</span> <span class="ConId">Parse</span> | |
<span class="Statement">|</span> <span class="Comment">-- | List the classes used in a template. </span><span class="Todo">TODO</span><span class="Comment"> Later, we want to list (or create a tree) of extends/includes.</span> | |
<span class="ConId">Classes</span> | |
<span class="Statement">|</span> <span class="Comment">-- | List the fragments used in a template. If a name is given, extract that definition.</span> | |
<span class="ConId">Fragments</span> <span class="hsDelimiter">(</span><span class="ConId">Maybe</span> <span class="ConId">Text</span><span class="hsDelimiter">)</span> | |
<span class="Type">data</span> <span class="ConId">RenderMode</span> <span class="Statement">=</span> <span class="ConId">RenderNormal</span> <span class="Statement">|</span> <span class="ConId">RenderPretty</span> | |
<span class="Type">data</span> <span class="ConId">ParseMode</span> | |
<span class="Statement">=</span> <span class="Comment">-- | Don't process include statements.</span> | |
<span class="ConId">ParseShallow</span> | |
<span class="Statement">|</span> <span class="Comment">-- | Process the include statements, creating a complete template.</span> | |
<span class="ConId">ParseDeep</span> | |
<span class="Type">data</span> <span class="ConId">RunMode</span> | |
<span class="Statement">=</span> <span class="Comment">-- | A failing external command fails the template.</span> | |
<span class="ConId">RunNormal</span> | |
<span class="Statement">|</span> <span class="Comment">-- | A failing external command doesn't fail the template and its output is</span> | |
<span class="Comment">-- rendered in the template.</span> | |
<span class="ConId">RunPassthrough</span> | |
<span class="Comment">--------------------------------------------------------------------------------</span> | |
<span class="VarId">parserInfo</span> <span class="Statement">::</span> <span class="ConId">A.ParserInfo</span> <span class="ConId">Command</span> | |
<span class="VarId">parserInfo</span> <span class="Statement">=</span> | |
<span class="VarId">A.info</span> <span class="hsDelimiter">(</span><span class="VarId">parser</span> <span class="Statement"><**></span> <span class="VarId">simpleVersioner</span> <span class="hsDelimiter">(</span><span class="String">"slab "</span> <span class="Statement"><></span> <span class="VarId">version'</span><span class="hsDelimiter">)</span> <span class="Statement"><**></span> <span class="VarId">A.helper</span><span class="hsDelimiter">)</span> <span class="Statement">$</span> | |
<span class="VarId">A.fullDesc</span> | |
<span class="Statement"><></span> <span class="VarId">A.header</span> | |
<span class="hsDelimiter">(</span><span class="String">"slab "</span> <span class="Statement"><></span> <span class="VarId">version'</span> <span class="Statement"><></span> <span class="String">" - A programmable markup language to generate HTML"</span><span class="hsDelimiter">)</span> | |
<span class="Statement"><></span> <span class="VarId">A.progDesc</span> | |
<span class="String">"Slab is a programmable markup language to generate HTML."</span> | |
<span class="Type">where</span> | |
<span class="VarId">version'</span> <span class="Statement">=</span> <span class="VarId">showVersion</span> <span class="VarId">version</span> | |
<span class="Comment">--------------------------------------------------------------------------------</span> | |
<span class="VarId">parser</span> <span class="Statement">::</span> <span class="ConId">A.Parser</span> <span class="ConId">Command</span> | |
<span class="VarId">parser</span> <span class="Statement">=</span> | |
<span class="VarId">A.subparser</span> | |
<span class="hsDelimiter">(</span> <span class="VarId">A.command</span> | |
<span class="String">"build"</span> | |
<span class="hsDelimiter">(</span> <span class="VarId">A.info</span> <span class="hsDelimiter">(</span><span class="VarId">parserBuild</span> <span class="Statement"><**></span> <span class="VarId">A.helper</span><span class="hsDelimiter">)</span> <span class="Statement">$</span> | |
<span class="VarId">A.progDesc</span> | |
<span class="String">"Build a library of Slab templates to HTML"</span> | |
<span class="hsDelimiter">)</span> | |
<span class="Statement"><></span> <span class="VarId">A.command</span> | |
<span class="String">"watch"</span> | |
<span class="hsDelimiter">(</span> <span class="VarId">A.info</span> <span class="hsDelimiter">(</span><span class="VarId">parserWatch</span> <span class="Statement"><**></span> <span class="VarId">A.helper</span><span class="hsDelimiter">)</span> <span class="Statement">$</span> | |
<span class="VarId">A.progDesc</span> | |
<span class="String">"Watch and build a library of Slab templates to HTML"</span> | |
<span class="hsDelimiter">)</span> | |
<span class="Statement"><></span> <span class="VarId">A.command</span> | |
<span class="String">"serve"</span> | |
<span class="hsDelimiter">(</span> <span class="VarId">A.info</span> <span class="hsDelimiter">(</span><span class="VarId">parserServe</span> <span class="Statement"><**></span> <span class="VarId">A.helper</span><span class="hsDelimiter">)</span> <span class="Statement">$</span> | |
<span class="VarId">A.progDesc</span> | |
<span class="String">"Watch and serve a library of Slab templates"</span> | |
<span class="hsDelimiter">)</span> | |
<span class="Statement"><></span> <span class="VarId">A.command</span> | |
<span class="String">"report"</span> | |
<span class="hsDelimiter">(</span> <span class="VarId">A.info</span> <span class="hsDelimiter">(</span><span class="VarId">parserReport</span> <span class="Statement"><**></span> <span class="VarId">A.helper</span><span class="hsDelimiter">)</span> <span class="Statement">$</span> | |
<span class="VarId">A.progDesc</span> | |
<span class="String">"Analyse a library of Slab templates"</span> | |
<span class="hsDelimiter">)</span> | |
<span class="Statement"><></span> <span class="VarId">A.command</span> | |
<span class="String">"render"</span> | |
<span class="hsDelimiter">(</span> <span class="VarId">A.info</span> <span class="hsDelimiter">(</span><span class="VarId">parserRender</span> <span class="Statement"><**></span> <span class="VarId">A.helper</span><span class="hsDelimiter">)</span> <span class="Statement">$</span> | |
<span class="VarId">A.progDesc</span> | |
<span class="String">"Render a Slab template to HTML"</span> | |
<span class="hsDelimiter">)</span> | |
<span class="Statement"><></span> <span class="VarId">A.command</span> | |
<span class="String">"run"</span> | |
<span class="hsDelimiter">(</span> <span class="VarId">A.info</span> <span class="hsDelimiter">(</span><span class="VarId">parserExectue</span> <span class="Statement"><**></span> <span class="VarId">A.helper</span><span class="hsDelimiter">)</span> <span class="Statement">$</span> | |
<span class="VarId">A.progDesc</span> | |
<span class="String">"Execute a Slab template"</span> | |
<span class="hsDelimiter">)</span> | |
<span class="Statement"><></span> <span class="VarId">A.command</span> | |
<span class="String">"evaluate"</span> | |
<span class="hsDelimiter">(</span> <span class="VarId">A.info</span> <span class="hsDelimiter">(</span><span class="VarId">parserEvaluate</span> <span class="Statement"><**></span> <span class="VarId">A.helper</span><span class="hsDelimiter">)</span> <span class="Statement">$</span> | |
<span class="VarId">A.progDesc</span> | |
<span class="String">"Evaluate a Slab template"</span> | |
<span class="hsDelimiter">)</span> | |
<span class="Statement"><></span> <span class="VarId">A.command</span> | |
<span class="String">"parse"</span> | |
<span class="hsDelimiter">(</span> <span class="VarId">A.info</span> <span class="hsDelimiter">(</span><span class="VarId">parserParse</span> <span class="Statement"><**></span> <span class="VarId">A.helper</span><span class="hsDelimiter">)</span> <span class="Statement">$</span> | |
<span class="VarId">A.progDesc</span> | |
<span class="String">"Parse a Slab template to AST"</span> | |
<span class="hsDelimiter">)</span> | |
<span class="Statement"><></span> <span class="VarId">A.command</span> | |
<span class="String">"generate"</span> | |
<span class="hsDelimiter">(</span> <span class="VarId">A.info</span> <span class="hsDelimiter">(</span><span class="VarId">parserGenerate</span> <span class="Statement"><**></span> <span class="VarId">A.helper</span><span class="hsDelimiter">)</span> <span class="Statement">$</span> | |
<span class="VarId">A.progDesc</span> | |
<span class="String">"Generate code corresponding to a Slab template"</span> | |
<span class="hsDelimiter">)</span> | |
<span class="Statement"><></span> <span class="VarId">A.command</span> | |
<span class="String">"classes"</span> | |
<span class="hsDelimiter">(</span> <span class="VarId">A.info</span> <span class="hsDelimiter">(</span><span class="VarId">parserClasses</span> <span class="Statement"><**></span> <span class="VarId">A.helper</span><span class="hsDelimiter">)</span> <span class="Statement">$</span> | |
<span class="VarId">A.progDesc</span> | |
<span class="String">"Parse a Slab template and report its CSS classes"</span> | |
<span class="hsDelimiter">)</span> | |
<span class="Statement"><></span> <span class="VarId">A.command</span> | |
<span class="String">"fragments"</span> | |
<span class="hsDelimiter">(</span> <span class="VarId">A.info</span> <span class="hsDelimiter">(</span><span class="VarId">parserFragments</span> <span class="Statement"><**></span> <span class="VarId">A.helper</span><span class="hsDelimiter">)</span> <span class="Statement">$</span> | |
<span class="VarId">A.progDesc</span> | |
<span class="String">"Parse a Slab template and report its fragments"</span> | |
<span class="hsDelimiter">)</span> | |
<span class="hsDelimiter">)</span> | |
<span class="Comment">--------------------------------------------------------------------------------</span> | |
<span class="VarId">parserBuild</span> <span class="Statement">::</span> <span class="ConId">A.Parser</span> <span class="ConId">Command</span> | |
<span class="VarId">parserBuild</span> <span class="Statement">=</span> <span class="Statement">do</span> | |
<span class="VarId">srcDir</span> <span class="Statement"><-</span> | |
<span class="VarId">A.argument</span> | |
<span class="VarId">A.str</span> | |
<span class="hsDelimiter">(</span><span class="VarId">A.metavar</span> <span class="String">"DIR"</span> <span class="Statement"><></span> <span class="VarId">A.action</span> <span class="String">"file"</span> <span class="Statement"><></span> <span class="VarId">A.help</span> <span class="String">"Directory of Slab templates to build."</span><span class="hsDelimiter">)</span> | |
<span class="VarId">mode</span> <span class="Statement"><-</span> | |
<span class="VarId">A.flag</span> | |
<span class="ConId">RenderNormal</span> | |
<span class="ConId">RenderPretty</span> | |
<span class="hsDelimiter">(</span> <span class="VarId">A.long</span> <span class="String">"pretty"</span> <span class="Statement"><></span> <span class="VarId">A.help</span> <span class="String">"Use pretty-printing"</span> | |
<span class="hsDelimiter">)</span> | |
<span class="VarId">passthrough</span> <span class="Statement"><-</span> <span class="VarId">parserPassthroughFlag</span> | |
<span class="VarId">distDir</span> <span class="Statement"><-</span> | |
<span class="VarId">A.strOption</span> | |
<span class="hsDelimiter">(</span> <span class="VarId">A.long</span> <span class="String">"dist"</span> | |
<span class="Statement"><></span> <span class="VarId">A.value</span> <span class="String">"./_site"</span> | |
<span class="Statement"><></span> <span class="VarId">A.metavar</span> <span class="String">"DIR"</span> | |
<span class="Statement"><></span> <span class="VarId">A.help</span> | |
<span class="String">"A destination directory for the generated HTML files."</span> | |
<span class="hsDelimiter">)</span> | |
<span class="VarId">pure</span> <span class="Statement">$</span> <span class="ConId">Build</span> <span class="VarId">srcDir</span> <span class="VarId">mode</span> <span class="VarId">passthrough</span> <span class="VarId">distDir</span> | |
<span class="VarId">parserServe</span> <span class="Statement">::</span> <span class="ConId">A.Parser</span> <span class="ConId">Command</span> | |
<span class="VarId">parserServe</span> <span class="Statement">=</span> <span class="Statement">do</span> | |
<span class="VarId">srcDir</span> <span class="Statement"><-</span> | |
<span class="VarId">A.argument</span> | |
<span class="VarId">A.str</span> | |
<span class="hsDelimiter">(</span><span class="VarId">A.metavar</span> <span class="String">"DIR"</span> <span class="Statement"><></span> <span class="VarId">A.action</span> <span class="String">"file"</span> <span class="Statement"><></span> <span class="VarId">A.help</span> <span class="String">"Directory of Slab templates to build."</span><span class="hsDelimiter">)</span> | |
<span class="VarId">distDir</span> <span class="Statement"><-</span> | |
<span class="VarId">A.strOption</span> | |
<span class="hsDelimiter">(</span> <span class="VarId">A.long</span> <span class="String">"dist"</span> | |
<span class="Statement"><></span> <span class="VarId">A.value</span> <span class="String">"./_site"</span> | |
<span class="Statement"><></span> <span class="VarId">A.metavar</span> <span class="String">"DIR"</span> | |
<span class="Statement"><></span> <span class="VarId">A.help</span> | |
<span class="String">"A directory with existing static files."</span> | |
<span class="hsDelimiter">)</span> | |
<span class="VarId">pure</span> <span class="Statement">$</span> <span class="ConId">Serve</span> <span class="VarId">srcDir</span> <span class="VarId">distDir</span> | |
<span class="VarId">parserReport</span> <span class="Statement">::</span> <span class="ConId">A.Parser</span> <span class="ConId">Command</span> | |
<span class="VarId">parserReport</span> <span class="Statement">=</span> | |
<span class="VarId">A.subparser</span> | |
<span class="hsDelimiter">(</span> <span class="VarId">A.command</span> | |
<span class="String">"pages"</span> | |
<span class="hsDelimiter">(</span> <span class="VarId">A.info</span> <span class="hsDelimiter">(</span><span class="VarId">parserReportPages</span> <span class="Statement"><**></span> <span class="VarId">A.helper</span><span class="hsDelimiter">)</span> <span class="Statement">$</span> | |
<span class="VarId">A.progDesc</span> | |
<span class="String">"Report pages found in a directory"</span> | |
<span class="hsDelimiter">)</span> | |
<span class="Statement"><></span> <span class="VarId">A.command</span> | |
<span class="String">"headings"</span> | |
<span class="hsDelimiter">(</span> <span class="VarId">A.info</span> <span class="hsDelimiter">(</span><span class="VarId">parserReportHeadings</span> <span class="Statement"><**></span> <span class="VarId">A.helper</span><span class="hsDelimiter">)</span> <span class="Statement">$</span> | |
<span class="VarId">A.progDesc</span> | |
<span class="String">"Report the headings of a page"</span> | |
<span class="hsDelimiter">)</span> | |
<span class="Statement"><></span> <span class="VarId">A.command</span> | |
<span class="String">"element"</span> | |
<span class="hsDelimiter">(</span> <span class="VarId">A.info</span> <span class="hsDelimiter">(</span><span class="VarId">parserReportElement</span> <span class="Statement"><**></span> <span class="VarId">A.helper</span><span class="hsDelimiter">)</span> <span class="Statement">$</span> | |
<span class="VarId">A.progDesc</span> | |
<span class="String">"Return the content of element matching the provided ID"</span> | |
<span class="hsDelimiter">)</span> | |
<span class="hsDelimiter">)</span> | |
<span class="VarId">parserReportPages</span> <span class="Statement">::</span> <span class="ConId">A.Parser</span> <span class="ConId">Command</span> | |
<span class="VarId">parserReportPages</span> <span class="Statement">=</span> <span class="Statement">do</span> | |
<span class="VarId">srcDir</span> <span class="Statement"><-</span> | |
<span class="VarId">A.argument</span> | |
<span class="VarId">A.str</span> | |
<span class="hsDelimiter">(</span><span class="VarId">A.metavar</span> <span class="String">"DIR"</span> <span class="Statement"><></span> <span class="VarId">A.action</span> <span class="String">"file"</span> <span class="Statement"><></span> <span class="VarId">A.help</span> <span class="String">"Directory of Slab templates to analyse."</span><span class="hsDelimiter">)</span> | |
<span class="VarId">pure</span> <span class="Statement">$</span> <span class="ConId">ReportPages</span> <span class="VarId">srcDir</span> | |
<span class="VarId">parserReportHeadings</span> <span class="Statement">::</span> <span class="ConId">A.Parser</span> <span class="ConId">Command</span> | |
<span class="VarId">parserReportHeadings</span> <span class="Statement">=</span> <span class="Statement">do</span> | |
<span class="VarId">path</span> <span class="Statement"><-</span> <span class="VarId">parserTemplatePath</span> | |
<span class="VarId">pure</span> <span class="Statement">$</span> <span class="ConId">ReportHeadings</span> <span class="VarId">path</span> | |
<span class="VarId">parserReportElement</span> <span class="Statement">::</span> <span class="ConId">A.Parser</span> <span class="ConId">Command</span> | |
<span class="VarId">parserReportElement</span> <span class="Statement">=</span> <span class="Statement">do</span> | |
<span class="VarId">id_</span> <span class="Statement"><-</span> | |
<span class="VarId">A.argument</span> | |
<span class="VarId">A.str</span> | |
<span class="hsDelimiter">(</span><span class="VarId">A.metavar</span> <span class="String">"ID"</span> <span class="Statement"><></span> <span class="VarId">A.help</span> <span class="String">"Element ID to match."</span><span class="hsDelimiter">)</span> | |
<span class="VarId">path</span> <span class="Statement"><-</span> <span class="VarId">parserTemplatePath</span> | |
<span class="VarId">pure</span> <span class="Statement">$</span> <span class="ConId">ReportElement</span> <span class="VarId">id_</span> <span class="VarId">path</span> | |
<span class="VarId">parserWatch</span> <span class="Statement">::</span> <span class="ConId">A.Parser</span> <span class="ConId">Command</span> | |
<span class="VarId">parserWatch</span> <span class="Statement">=</span> <span class="Statement">do</span> | |
<span class="VarId">srcDir</span> <span class="Statement"><-</span> | |
<span class="VarId">A.argument</span> | |
<span class="VarId">A.str</span> | |
<span class="hsDelimiter">(</span><span class="VarId">A.metavar</span> <span class="String">"DIR"</span> <span class="Statement"><></span> <span class="VarId">A.action</span> <span class="String">"file"</span> <span class="Statement"><></span> <span class="VarId">A.help</span> <span class="String">"Directory of Slab templates to watch."</span><span class="hsDelimiter">)</span> | |
<span class="VarId">mode</span> <span class="Statement"><-</span> | |
<span class="VarId">A.flag</span> | |
<span class="ConId">RenderNormal</span> | |
<span class="ConId">RenderPretty</span> | |
<span class="hsDelimiter">(</span> <span class="VarId">A.long</span> <span class="String">"pretty"</span> <span class="Statement"><></span> <span class="VarId">A.help</span> <span class="String">"Use pretty-printing"</span> | |
<span class="hsDelimiter">)</span> | |
<span class="VarId">passthrough</span> <span class="Statement"><-</span> <span class="VarId">parserPassthroughFlag</span> | |
<span class="VarId">distDir</span> <span class="Statement"><-</span> | |
<span class="VarId">A.strOption</span> | |
<span class="hsDelimiter">(</span> <span class="VarId">A.long</span> <span class="String">"dist"</span> | |
<span class="Statement"><></span> <span class="VarId">A.value</span> <span class="String">"./_site"</span> | |
<span class="Statement"><></span> <span class="VarId">A.metavar</span> <span class="String">"DIR"</span> | |
<span class="Statement"><></span> <span class="VarId">A.help</span> | |
<span class="String">"A destination directory for the generated HTML files."</span> | |
<span class="hsDelimiter">)</span> | |
<span class="VarId">pure</span> <span class="Statement">$</span> <span class="ConId">Watch</span> <span class="VarId">srcDir</span> <span class="VarId">mode</span> <span class="VarId">passthrough</span> <span class="VarId">distDir</span> | |
<span class="VarId">parserExectue</span> <span class="Statement">::</span> <span class="ConId">A.Parser</span> <span class="ConId">Command</span> | |
<span class="VarId">parserExectue</span> <span class="Statement">=</span> <span class="Statement">do</span> | |
<span class="VarId">pathAndmode</span> <span class="Statement"><-</span> <span class="VarId">parserWithPath</span> | |
<span class="VarId">simpl</span> <span class="Statement"><-</span> | |
<span class="VarId">A.switch</span> | |
<span class="hsDelimiter">(</span> <span class="VarId">A.long</span> <span class="String">"simplify"</span> <span class="Statement"><></span> <span class="VarId">A.help</span> <span class="String">"Simplify the AST"</span> | |
<span class="hsDelimiter">)</span> | |
<span class="VarId">passthrough</span> <span class="Statement"><-</span> <span class="VarId">parserPassthroughFlag</span> | |
<span class="VarId">pure</span> <span class="Statement">$</span> <span class="VarId">uncurry</span> <span class="ConId">CommandWithPath</span> <span class="VarId">pathAndmode</span> <span class="Statement">$</span> <span class="ConId">Execute</span> <span class="VarId">simpl</span> <span class="VarId">passthrough</span> | |
<span class="VarId">parserRender</span> <span class="Statement">::</span> <span class="ConId">A.Parser</span> <span class="ConId">Command</span> | |
<span class="VarId">parserRender</span> <span class="Statement">=</span> <span class="Statement">do</span> | |
<span class="VarId">mode</span> <span class="Statement"><-</span> | |
<span class="VarId">A.flag</span> | |
<span class="ConId">RenderNormal</span> | |
<span class="ConId">RenderPretty</span> | |
<span class="hsDelimiter">(</span> <span class="VarId">A.long</span> <span class="String">"pretty"</span> <span class="Statement"><></span> <span class="VarId">A.help</span> <span class="String">"Use pretty-printing"</span> | |
<span class="hsDelimiter">)</span> | |
<span class="VarId">pathAndmode</span> <span class="Statement"><-</span> <span class="VarId">parserWithPath</span> | |
<span class="VarId">passthrough</span> <span class="Statement"><-</span> <span class="VarId">parserPassthroughFlag</span> | |
<span class="VarId">pure</span> <span class="Statement">$</span> <span class="VarId">uncurry</span> <span class="ConId">CommandWithPath</span> <span class="VarId">pathAndmode</span> <span class="Statement">$</span> <span class="ConId">Render</span> <span class="VarId">mode</span> <span class="VarId">passthrough</span> | |
<span class="VarId">parserEvaluate</span> <span class="Statement">::</span> <span class="ConId">A.Parser</span> <span class="ConId">Command</span> | |
<span class="VarId">parserEvaluate</span> <span class="Statement">=</span> <span class="Statement">do</span> | |
<span class="VarId">pathAndmode</span> <span class="Statement"><-</span> <span class="VarId">parserWithPath</span> | |
<span class="VarId">simpl</span> <span class="Statement"><-</span> | |
<span class="VarId">A.switch</span> | |
<span class="hsDelimiter">(</span> <span class="VarId">A.long</span> <span class="String">"simplify"</span> <span class="Statement"><></span> <span class="VarId">A.help</span> <span class="String">"Simplify the AST"</span> | |
<span class="hsDelimiter">)</span> | |
<span class="VarId">pure</span> <span class="Statement">$</span> <span class="VarId">uncurry</span> <span class="ConId">CommandWithPath</span> <span class="VarId">pathAndmode</span> <span class="Statement">$</span> <span class="ConId">Evaluate</span> <span class="VarId">simpl</span> | |
<span class="VarId">parserParse</span> <span class="Statement">::</span> <span class="ConId">A.Parser</span> <span class="ConId">Command</span> | |
<span class="VarId">parserParse</span> <span class="Statement">=</span> <span class="Statement">do</span> | |
<span class="VarId">pathAndmode</span> <span class="Statement"><-</span> <span class="VarId">parserWithPath</span> | |
<span class="VarId">pure</span> <span class="Statement">$</span> <span class="VarId">uncurry</span> <span class="ConId">CommandWithPath</span> <span class="VarId">pathAndmode</span> <span class="ConId">Parse</span> | |
<span class="VarId">parserGenerate</span> <span class="Statement">::</span> <span class="ConId">A.Parser</span> <span class="ConId">Command</span> | |
<span class="VarId">parserGenerate</span> <span class="Statement">=</span> <span class="Statement">do</span> | |
<span class="VarId">path</span> <span class="Statement"><-</span> <span class="VarId">parserTemplatePath</span> | |
<span class="VarId">pure</span> <span class="Statement">$</span> <span class="ConId">Generate</span> <span class="VarId">path</span> | |
<span class="VarId">parserClasses</span> <span class="Statement">::</span> <span class="ConId">A.Parser</span> <span class="ConId">Command</span> | |
<span class="VarId">parserClasses</span> <span class="Statement">=</span> <span class="Statement">do</span> | |
<span class="VarId">pathAndmode</span> <span class="Statement"><-</span> <span class="VarId">parserWithPath</span> | |
<span class="VarId">pure</span> <span class="Statement">$</span> <span class="VarId">uncurry</span> <span class="ConId">CommandWithPath</span> <span class="VarId">pathAndmode</span> <span class="ConId">Classes</span> | |
<span class="VarId">parserFragments</span> <span class="Statement">::</span> <span class="ConId">A.Parser</span> <span class="ConId">Command</span> | |
<span class="VarId">parserFragments</span> <span class="Statement">=</span> <span class="Statement">do</span> | |
<span class="VarId">pathAndmode</span> <span class="Statement"><-</span> <span class="VarId">parserWithPath</span> | |
<span class="VarId">mname</span> <span class="Statement"><-</span> | |
<span class="VarId">A.optional</span> <span class="Statement">$</span> | |
<span class="VarId">A.argument</span> | |
<span class="VarId">A.str</span> | |
<span class="hsDelimiter">(</span><span class="VarId">A.metavar</span> <span class="String">"NAME"</span> <span class="Statement"><></span> <span class="VarId">A.help</span> <span class="String">"Fragment name to extract."</span><span class="hsDelimiter">)</span> | |
<span class="VarId">pure</span> <span class="Statement">$</span> <span class="VarId">uncurry</span> <span class="ConId">CommandWithPath</span> <span class="VarId">pathAndmode</span> <span class="Statement">$</span> <span class="ConId">Fragments</span> <span class="VarId">mname</span> | |
<span class="Comment">--------------------------------------------------------------------------------</span> | |
<span class="VarId">parserWithPath</span> <span class="Statement">::</span> <span class="ConId">A.Parser</span> <span class="hsDelimiter">(</span><span class="ConId">FilePath</span><span class="hsDelimiter">,</span> <span class="ConId">ParseMode</span><span class="hsDelimiter">)</span> | |
<span class="VarId">parserWithPath</span> <span class="Statement">=</span> <span class="hsDelimiter">(,)</span> <span class="Statement"><$></span> <span class="VarId">parserTemplatePath</span> <span class="Statement"><*></span> <span class="VarId">parserShallowFlag</span> | |
<span class="VarId">parserTemplatePath</span> <span class="Statement">::</span> <span class="ConId">A.Parser</span> <span class="ConId">FilePath</span> | |
<span class="VarId">parserTemplatePath</span> <span class="Statement">=</span> | |
<span class="VarId">A.argument</span> | |
<span class="VarId">A.str</span> | |
<span class="hsDelimiter">(</span><span class="VarId">A.metavar</span> <span class="String">"FILE"</span> <span class="Statement"><></span> <span class="VarId">A.action</span> <span class="String">"file"</span> <span class="Statement"><></span> <span class="VarId">A.help</span> <span class="String">"Slab template to parse."</span><span class="hsDelimiter">)</span> | |
<span class="VarId">parserShallowFlag</span> <span class="Statement">::</span> <span class="ConId">A.Parser</span> <span class="ConId">ParseMode</span> | |
<span class="VarId">parserShallowFlag</span> <span class="Statement">=</span> | |
<span class="VarId">A.flag</span> | |
<span class="ConId">ParseDeep</span> | |
<span class="ConId">ParseShallow</span> | |
<span class="hsDelimiter">(</span> <span class="VarId">A.long</span> <span class="String">"shallow"</span> <span class="Statement"><></span> <span class="VarId">A.help</span> <span class="String">"Don't parse recursively the included Slab files"</span> | |
<span class="hsDelimiter">)</span> | |
<span class="Comment">--------------------------------------------------------------------------------</span> | |
<span class="VarId">parserPassthroughFlag</span> <span class="Statement">::</span> <span class="ConId">A.Parser</span> <span class="ConId">RunMode</span> | |
<span class="VarId">parserPassthroughFlag</span> <span class="Statement">=</span> | |
<span class="VarId">A.flag</span> | |
<span class="ConId">RunNormal</span> | |
<span class="ConId">RunPassthrough</span> | |
<span class="hsDelimiter">(</span> <span class="VarId">A.long</span> <span class="String">"passthrough"</span> <span class="Statement"><></span> <span class="VarId">A.help</span> <span class="String">"Allow external command failures"</span> | |
<span class="hsDelimiter">)</span> | |
<span class="Comment">-- From optparse-applicative ~ 0.18 (we're on 0.17), although we add also `-v`.</span> | |
<span class="Comment">-- | A hidden \"--version\" option that displays the version.</span> | |
<span class="Comment">--</span> | |
<span class="Comment">-- > opts :: ParserInfo Sample</span> | |
<span class="Comment">-- > opts = info (sample <**> simpleVersioner "v1.2.3") mempty</span> | |
<span class="VarId">simpleVersioner</span> | |
<span class="Statement">::</span> <span class="ConId">String</span> | |
<span class="Comment">-- ^ Version string to be shown</span> | |
<span class="Statement">-></span> <span class="ConId">A.Parser</span> <span class="hsDelimiter">(</span><span class="VarId">a</span> <span class="Statement">-></span> <span class="VarId">a</span><span class="hsDelimiter">)</span> | |
<span class="VarId">simpleVersioner</span> <span class="VarId">version_</span> <span class="Statement">=</span> | |
<span class="VarId">A.infoOption</span> <span class="VarId">version_</span> <span class="Statement">$</span> | |
<span class="VarId">mconcat</span> | |
<span class="hsDelimiter">[</span> <span class="VarId">A.long</span> <span class="String">"version"</span> | |
<span class="hsDelimiter">,</span> <span class="VarId">A.short</span> <span class="Constant">'v'</span> | |
<span class="hsDelimiter">,</span> <span class="VarId">A.help</span> <span class="String">"Show version information"</span> | |
<span class="hsDelimiter">,</span> <span class="VarId">A.hidden</span> | |
<span class="hsDelimiter">]</span> | |
</pre> | |
</body> | |
</html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment