h*&       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~            0.0.2.0Command-line interface to Slab Safe-Inferred "%&4slab!Don't process include statements.slab=Process the include statements, creating a complete template.slabCommands operating on a path. slab$If True, simplify the evaluated AST. slabList the classes used in a template. TODO Later, we want to list (or create a tree) of extends/includes. slabList the fragments used in a template. If a name is given, extract that definition.slab$Generate code. Only Haskell for now.      1Errors that the different Slab stages can produce Safe-Inferred "%&dslabRepresent all errors emitted by Slab. I.e. this is used in each stage (, , , ).slab9Extract a Right value, or die, emitting an error message. The abstract syntax used by Slab Safe-Inferred "%&!slabA representation of a  template is a list of Inline, supporting efficient rendering. Use parse< to create a template from a text containing placeholders. " is a literal Text value. # is a placeholder created with #{...}.$slabSimple expression language.:slab-The text follows an element on the same line.;slabThe text follows a pipe character. Multiple lines each introduced by a pipe symbol are grouped as a single  node.<slab:The text is part of a text block following a trailing dot.=slabThe text is the content of an include statement without a .slab extension.>slab"The text is the output of command.{slab"Arbitrary element name, using the el keyword.|slab?A "passthrough" comment will be included in the generated HTML.slabOnly  doctype html for now.slabNothing# when the template is parsed, then  Just nodes after preprocessing (i.e. actually running the include statement). The filter name follows the same behavior as BlockFilter.slabThis doesn't exist in Pug. This is like a mixin than receive block arguments. Or like a parent template that can be extended by a child template.slabdefault defines an optional formal parameter with a default content. Its content is used when the argument is not given.slabSimilar to an anonymous fragment call, where the fragment body is the content of the referenced file.slabAllow to assign the content of a JSON file to a variable. The syntax is specific to how Struct has a require function in scope.slabTakes two blocks and returns a BlockList containing both, but peel the outer list of a and b if they are themselves BlockList.slab5Set attrs on a the first block, if it is a BlockElem.slab1Set the content on a block, if it is a BlockElem.slabGroup multiple classes or IDs in a single class or ID, and transform the other attributes in (s.|}~GiYpsvZTwWJV{Hx^hIqKoXULMNOPQRS[\]_`abcdefgjklmnrtuyzCFDE?A@B9:;<=>$&')*,5.4%(+-/0123678!"# |}~GiYpsvZTwWJV{Hx^hIqKoXULMNOPQRS[\]_`abcdefgjklmnrtuyzCFDE?A@B9:;<=>$&')*,5.4%(+-/0123678!"# Render an AST to HTML Safe-Inferred "%&R(Parse the concrete Slab syntax to an AST Safe-Inferred "%&I slabRecord whether we are parsing a template within the normal block syntax, or within an inline block syntax (introduced by #{...}). This is allow a closing curly bracket in the normal case without requiring to escape it, and disallowing it in the inline case (since it is used to end the inline case).slabA mapping from placeholders in the template to values with an applicative lookup function. For instance the lookup function can fail, returning  or .slab0We expose the expression parser for development:  Parse.parseExpr "1 + 2 * a" slabParse the indented content of an HTML element or a fragment call.slab(Parse lines of text, indented more than ref?. E.g.: a b c will return ["a", " b", "c"].slabConsidering all the given lines as a block, strip the leading whitespace of each line so that the left-most character of the block is in the first column.slabParse multiple lines starting each with a pipe prefix. Most of our parsers parse a single line (and optional indented child lines) and most nodes map to a single line, but here we want to be able to view such blocks as a single node, and we make sur to add newlines between each when rendered.slab&A parser to convert the content of an included to Syntax. The behavior w.r.t. to newlines should be the same as having each line directly preceded by a | in the including file.slabCreate a template from a template string. A malformed template string will cause  to return a parse error.slabEquivalent to  but in an inline context.-Parse and process included and imported files Safe-Inferred "%&slab Similar to  parseFile( but pre-process the include statements.)Translate from the Slab syntax to Haskell Safe-Inferred "%&slab Render an element, aligning the ! character: 1 elem ! a ! b $ do child0 child1 (Evaluate an AST (to a non-reducible AST) Safe-Inferred "%&oslab Similar to preprocessFile but evaluate the template.slabSame as  plus an implicit content block. Note that unlike , this version takes also care of passing the environment being constructed to each definition. *Run external commands referenced by an AST Safe-Inferred "%&+slab Similar to  evaluateFile but run external commands. Build Slab templates to HTML Safe-Inferred "%&slab A version of  that doesn't write files to disk, but instead record the generated  s in STM. >Report information about Slab templates (mostly empty for now) Safe-Inferred "%& *Continuously build a set of Slab templates Safe-Inferred "%& 2Run a development server to preview Slab templates Safe-Inferred "%&1slab Turn our ? implementation into a Wai application, suitable for Warp.run.slabTry to serve a built page, and fallback to static files if the page doesn't exist.Implementation of Slab's CLI Safe-Inferred "%& slab"eval" parses a string as a  Syntax.Syntax>, and evaluates it. This doesn't run the proprocessing stage.  Run.eval "p= 1 + 2 * 3" slab!Run "eval" and render the result.slab"calc" parses a string as a  Syntax.Expr, and evaluates it. I.e. it doens't use the fragment syntax, or imports and includes.  Run.calc "1 + 2 * 3"  !"#$%&'()*+,-./01123456789:;<=>?@ABCDEFGHIJKLMNOPQRSQTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~XG               #slab-0.0.2.0-JcSfHNo8AijAu8vbGzPhCC Slab.Command Slab.Error Slab.Syntax Slab.Render Slab.ParseSlab.PreProcessSlab.Generate.Haskell Slab.Evaluate Slab.Execute Slab.Build Slab.Report Slab.Watch Slab.ServeSlab.RunslabSlabParse PreProcessEvaluate ExecuteErrorDataText ParseMode ParseShallow ParseDeep RenderMode RenderNormal RenderPrettyCommandWithPathRenderExecuteClasses FragmentsCommandBuildWatchServeReportGenerate parserInfoError ParseErrorPreProcessError EvaluateErrorunwrapdisplay $fShowError $fEqErrorEnv envVariablesInlineLitPlaceExprVariableBoolIntSingleQuoteStringListObjectLookup ApplicationAddSubTimesDivide GreaterThan LesserThanEqualConsBlockFragThunkBuiltIn TextSyntaxNormalPipeDotInclude RunOutputAttrIdClass TrailingSymHasDotHasEqualNoSymElemHtmlBodyDivSpanBrHrH1H2H3H4H5H6HeaderHeadMetaMainLinkAPUlLiTitleTableTheadTbodyTrTdDlDtDdFooterFigureFormLabel BlockquoteButton FigcaptionAudioScriptStyleSmallSourcePreCodeImgIFrameInputISvgTextareaCanvas CommentType NormalCommentPassthroughComment BlockDoctype BlockElem BlockText BlockIncludeBlockFragmentDefBlockFragmentCallBlockFor BlockComment BlockFilter BlockRawElem BlockDefault BlockImportBlockRun BlockReadJsonBlockAssignVarBlockIf BlockList BlockCode isDoctype trailingSym pasteBlockssetAttrs setContentemptyEnv displayEnv freeVariablesthunkextractClassesextractFragments findFragmentidNamesFromAttrsclassNamesFromAttrsnamesFromAttrs groupAttrs$fShowBlockFragment$fEqBlockFragment$fEqEnv $fShowEnv $fShowExpr$fEqExpr $fShowBlock $fEqBlock $fEqInline $fShowInline $fShowAttr$fEqAttr$fShowTextSyntax$fEqTextSyntax$fShowTrailingSym$fEqTrailingSym $fShowElem$fEqElem$fShowCommentType$fEqCommentType prettyHtmls renderHtmlsrenderHtmlsUtf8 renderBlocksInterpolationContext parseFile parseFileEparse parseExprparserTextIncludeparse' parseInlinesContext ctxStartPathpreprocessFilepreprocessFileErenderHs evaluateFile defaultEnvevaluateevalExprsimplify executeFileexecuteStmStorebuildDir buildFilebuildDirInMemorybuildFileInMemory listTemplatesrun $fShowModuleevalrendercalc InlineContextbase GHC.MaybeNothing Data.EitherLeftparserElemBody textBlockrealign parserPipeparseInlineBlock parserBlockprettyBlockElemextractVariables'extractVariablesserveserverTapp