h*      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~            0.0.1.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.       Safe-Inferred "%&slabRepresent all errors emitted by Slab. I.e. this is used in each stage (, , , ).slab9Extract a Right value, or die, emitting an error message. Safe-Inferred "%&1\slab Turn our ? implementation into a Wai application, suitable for Warp.run. Safe-Inferred "%&5!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.2slab-The text follows an element on the same line.3slabThe text follows a pipe character. Multiple lines each introduced by a pipe symbol are grouped as a single y node.4slab:The text is part of a text block following a trailing dot.5slabThe text is the content of an include statement without a .slab extension.6slab"The text is the output of command.sslab?A "passthrough" comment will be included in the generated HTML.wslabOnly  doctype html for now.zslabNothing# 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.slabGroup multiple classes or IDs in a single class or ID, and transform the other attributes in 's.vwxyz{|}~stu?aQhknRLoOBN@pV`AiCgPMDEFGHIJKSTUWXYZ[\]^_bcdefjlmqr;><=798:123456$&(),%'*+-./0!"# vwxyz{|}~stu?aQhknRLoOBN@pV`AiCgPMDEFGHIJKSTUWXYZ[\]^_bcdefjlmqr;><=798:123456$&(),%'*+-./0!"#  Safe-Inferred "%& Safe-Inferred "%&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: ( print $ Parse.parseExpr "1 + 2 * a" 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. Safe-Inferred "%&6slab Similar to  parseFile( but pre-process the include statements. Safe-Inferred "%&slab Render an element, aligning the ! character: 1 elem ! a ! b $ do child0 child1   Safe-Inferred "%&sslab Similar to preprocessFile but evaluate the template.  Safe-Inferred "%&slab Similar to  evaluateFile but run external commands.  Safe-Inferred "%&<  Safe-Inferred "%&}  Safe-Inferred "%&Implementation of Slab's CLI Safe-Inferred "%&  !"#$%&'()*+,-./01123456789:;<=>?@ABCDEFGHIJKILMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~          0  00"slab-0.0.1.0-RHULaES5mQImn2qqUkHR5 Slab.Command Slab.Error Slab.Serve Slab.Syntax Slab.Render Slab.ParseSlab.PreProcessSlab.Generate.Haskell Slab.Evaluate Slab.Execute Slab.Build Slab.Report Slab.WatchSlab.RunslabSlabParse PreProcessEvaluate ExecuteErrorDataText ParseMode ParseShallow ParseDeep RenderMode RenderNormal RenderPrettyCommandWithPathRenderExecuteClasses FragmentsCommandBuildWatchServeReportGenerate parserInfoError ParseErrorPreProcessError EvaluateErrorunwrap $fShowError $fEqErrorrunEnv envVariablesInlineLitPlaceExprVariableIntSingleQuoteStringListObjectLookupAddSubTimesDivideFragThunk TextSyntaxNormalPipeDotInclude RunOutputAttrIdClass TrailingSymHasDotHasEqualNoSymElemHtmlBodyDivSpanBrHrH1H2H3H4H5H6HeaderHeadMetaMainLinkAPUlLiTitleTableTheadTbodyTrTdDlDtDdFooterFigureFormLabel BlockquoteButton FigcaptionAudioScriptStyleSmallSourcePreCodeImgIFrameInputISvgTextareaCanvas CommentType NormalCommentPassthroughCommentBlock BlockDoctype BlockElem BlockText BlockIncludeBlockFragmentDefBlockFragmentCallBlockFor BlockComment BlockFilter BlockRawElem BlockDefault BlockImportBlockRun BlockReadJsonBlockAssignVarBlockIf BlockList BlockCode isDoctype trailingSymemptyEnv freeVariablesthunkextractClassesextractFragments findFragmentidNamesFromAttrsclassNamesFromAttrsnamesFromAttrs groupAttrs$fShowBlockFragment$fEqBlockFragment$fEqEnv $fShowEnv $fShowExpr$fEqExpr $fShowBlock $fEqBlock $fEqInline $fShowInline $fShowAttr$fEqAttr$fShowTextSyntax$fEqTextSyntax$fShowTrailingSym$fEqTrailingSym $fShowElem$fEqElem$fShowCommentType$fEqCommentType prettyHtmls renderHtmls renderBlocksInterpolationContext parseFile parseFileEparse parseExprparserTextIncludeparse' parseInlinesContext ctxStartPathpreprocessFilepreprocessFileErenderHs evaluateFileevaluate defaultEnvsimplify executeFileexecutebuildDir buildFile listTemplates $fShowModuleserveserverTbase GHC.MaybeNothing Data.EitherLeft textBlockrealign parserPipeprettyBlockElem