úÎö_ìØT      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMN O P Q R S None.HeistT is the monad used for  processing. HeistT provides  " passthrough"= instances for many of the monads you might use in the inner  monad. JHolds all the state information needed for template processing. You will  build a  HeistState using any of Heist's HeistState m -> HeistState m  "filter"( functions. Then you use the resulting  HeistState in calls to  renderTemplate. T,A mapping of splice names to splice actions U)A mapping of template names to templates V#A flag to control splice recursion W4The path to the template currently being processed. XBA counter keeping track of the current recursion depth to prevent  infinite loops. Y*A hook run on all templates at load time. Z;A hook run on all templates just before they are rendered. [:A hook run on all templates just after they are rendered. \5The doctypes encountered during template processing. ]%The full path to the current template's file on disk. ^*SpliceMap associates a name and a Splice. 0A Splice is a HeistT computation that returns a . _:All documents representing templates are stored in a map. `CReversed list of directories. This holds the path to the template  currently being processed. <MIME Type. The type alias is here to make the API clearer. A 5 is a forest of XML nodes. Here we deviate from the single root nodeB constraint of well-formed XML because we want to allow templates E to contain fragments of a document that may not have a single root. =Gets the names of all the templates defined in a HeistState. ;Gets the names of all the splices defined in a HeistState. aHThe Typeable instance is here so Heist can be dynamically executed with  Hint. EEvaluates a template monad as a computation in the underlying monad. b Helper for MonadError instance. cHelper for MonadCont instance. dHThe Typeable instance is here so Heist can be dynamically executed with  Hint. )Gets the node currently being processed.   <speech author="Shakespeare"> ! To sleep, perchance to dream.  </speech> When you call  getParamNode inside the code for the speech splice, it  returns the Node for the speech tag and its children. getParamNode >>=  childNodes returns a list containing one TextNode containing part of  Hamlet' s speech. liftM (getAttribute "author") getParamNode would  return Just  Shakespeare. HeistT's e. HeistT's f. HeistT's g. HeistT's h. HeistT's i. GRestores the HeistState. This function is almost like putTS except it J preserves the current doctypes. You should use this function instead of  putTSE to restore an old state. This was needed because doctypes needs to  be in a  global scope! as opposed to the template call  local scope of @ state items such as recursionDepth, curContext, and spliceMap. BAbstracts the common pattern of running a HeistT computation with  a modified heist state. jMonadCont passthrough instance k MonadError passthrough instance l!MonadReader passthrough instance m MonadState passthrough instance nMonadPlus passthrough instance o!Alternative passthrough instance pMonadFix passthrough instance qMonadCatchIO instance rMonadTrans instance sMonadIO instance tMonad instance uApplicative instance vFunctor instance 9wxyTUVWXYZ[\]^_z{|}`abcd ~jklmnopqrstuv€(wxyTUVWXYZ[\]^_z{|}`abcd )wx yTUVWXYZ[\]^_z{|}`abcd ~jklmnopqrstuv€None$Default name for the ignore splice. =The ignore tag and everything it surrounds disappears in the  rendered output.  None;‚Type synonym for parsers. ƒDAST to hold attribute parsing structure. This is necessary because  attoparsec doesn',t support parsers running in another monad. „!Mappends a doctype to the state. Adds an on-load hook to a . Adds a pre-run hook to a . Adds a post-run hook to a . 6Binds a new splice declaration to a tag name within a . 0Binds a set of new splice declarations within a . … Sets the current template file.  Converts † to a splice returning a single TextNode. Runs the parameter node'0s children and returns the resulting node list. G By itself this function is a simple passthrough splice that makes the J spliced node disappear. In combination with locally bound splices, this F function makes it easier to pass the desired view into your splices. IBinds a list of splices before using the children of the spliced node as  a view. IWrapper around runChildrenWith that applies a transformation function to G the second item in each of the tuples before calling runChildrenWith. FLike runChildrenWith but using constant templates rather than dynamic  splices. ILike runChildrenWith but using literal text rather than dynamic splices. CMaps a splice generating function over a list and concatenates the  results. .Convenience function for looking up a splice. ‡HConverts a path into an array of the elements in reverse order. If the I path is absolute, we need to remove the leading slash so the split doesn't  leave ""# as the last element of the TPath. FIXME ".." currently doesn'-t work in paths, the solution is non-trivial ˆIConverts a path into an array of the elements in reverse order using the 3 path separator of the local operating system. See ‡ for more  details. ‰GConverts a path into an array of the elements in reverse order using a  forward slash (/) as the path separator. See ‡ for more  details. Š4Does a single template lookup without cascading up. ‹ISearches for a template by looking in the full path then backing up into = each of the parent directories until the template is found. Returns Œ8 if the given template can be found in the heist state. 0Convenience function for looking up a template. &Sets the templateMap in a HeistState. Ž$Adds a template to the heist state. !1Adds an HTML format template to the heist state. "0Adds an XML format template to the heist state. #CStops the recursive processing of splices. Consider the following  example:   <foo>  <bar>  ...  </bar>  </foo>  Assume that "foo"- is bound to a splice procedure. Running the foo ' splice will result in a list of nodes L . Normally foo will recursively  scan L for splices and run them. If foo calls  stopRecursion, L F will be included in the output verbatim without running any splices. Sets the current context $Gets the current context %DGets the full path to the file holding the template currently being K processed. Returns Nothing if the template is not associated with a file 5 on disk or if there is no template being processed. -Performs splice processing on a single node. ‘FHelper function for substituting a parsed attribute into an attribute  tuple. ’@Parses an attribute for any identifier expressions and performs  appropriate substitution. “,Parser for attribute variable substitution. ”(Gets the attribute value. If the splice' s result list contains non-text C nodes, this will translate them into text nodes with nodeText and  concatenate them together. :Originally, this only took the first node from the splices's result list, E and only if it was a text node. This caused problems when the splice's K result contained HTML entities, as they would split a text node. This was J then fixed to take the first consecutive bunch of text nodes, and return K their concatenation. This was seen as more useful than throwing an error, A and more intuitive than trying to render all the nodes as text. HHowever, it was decided in the end to render all the nodes as text, and - then concatenate them. If a splice returned  "some <b>text</b> foobar"', the user would almost certainly want  "some text foobar"/ to be rendered, and Heist would probably seem J annoyingly limited for not being able to do this. If the user really did  want it to render "some "*, it would probably be easier for them to K accept that they were silly to pass more than that to be substituted than 0 it would be for the former user to accept that  "some <b>text</b> foobar" is being rendered as "some " because  it's "more intuitive". &/Performs splice processing on a list of nodes. •@The maximum recursion depth. (Used to prevent infinite loops.) –FChecks the recursion flag and recurses accordingly. Does not recurse : deeper than mAX_RECURSION_DEPTH to avoid infinite loops. — Looks up a template name runs a  computation on it. '>Looks up a template name evaluates it by calling runNodeList. ˜Sets the document type of a ™ based on the   value. š.Same as evalWithHooks, but returns the entire ™ rather than J just the nodes. This is the right thing to do if we are starting at the  top level. ›ILooks up a template name evaluates it by calling runNodeList. This also 8 executes pre- and post-run hooks and adds the doctype. ()Binds a list of constant string splices. )'Binds a single constant string splice. *HRenders a template with the specified parameters. This is the function  to use when you want to call( a template and pass in parameters from G inside a splice. If the template does not exist, this version simply  returns an empty list. +CLike callTemplate except the splices being bound are constant text  splices. ,6Renders a template from the specified HeistState to a œ. The M MIME type returned is based on the detected character encoding, and whether J the root template was an HTML or XML format template. It will always be  texthtml@ or @textxml0. If a more specific MIME type is needed for a E particular XML application, it must be provided by the application. -IRenders a template with the specified arguments passed to it. This is a M convenience function for the common pattern of calling renderTemplate after M using bindString, bindStrings, or bindSplice to set up the arguments to the  template. )Reads an HTML or XML template from disk. ."Reads an HTML template from disk. /!Reads an XML template from disk. ž<Loads a template with the specified path and filename. The % template is only loaded if it has a .tpl or .xtpl extension. 0GTraverses the specified directory structure and builds a HeistState by  loading all the files with a .tpl or .xtpl extension. Ÿ6Runs a template modifying function on a DocumentFile.  5Runs the onLoad hook on the template and returns the   with the result inserted. 1/Adds a path prefix to all the templates in the  . If you K want to add multiple levels of directories, separate them with slashes as  in foo/bar9. Using an empty string as a path prefix will leave the   unchanged. >‚ƒ¡¢„ tag name splice action  source state splices to bind  start state …8List of splices to bind before running the param nodes. Returns the passed in view. Splice generating function List of tuples to be bound Splice generating function &List of items to generate splices for 1The result of all splices concatenated together. ‡ˆ‰Š‹ Ž!-Path that the template will be referenced by  The template' s DOM nodes 6An optional path to the actual file on disk where the  template is stored "-Path that the template will be referenced by  The template' s DOM nodes 6An optional path to the actual file on disk where the  template is stored #$%‘’“”&•–—'˜š›()*The name of the template Association list of  (name,value) parameter pairs +The name of the template Association list of  (name,value) parameter pairs £,-./žpath of the template root ,full file path (includes the template root) 0Ÿ 1>‚ƒ¡¢„…‡ˆ‰Š‹ Ž!"#$%‘’“”&•–—'˜š›()*+£,-./ž0Ÿ 1<‚ƒ¢¡„…‡ˆ‰Š‹ Ž!"#$%‘’“”&•–—'˜š›()*+£,-./ž0Ÿ 1None2#Default name for the apply splice. 3*Default attribute name for the apply tag. 4FRaw core of apply functionality. This is abstracted for use in other 2 places like an enhanced (from the original) bind 5EApplies a template as if the supplied nodes were the children of the   apply tag. 6$Implementation of the apply splice. 23456234562345623456None7"Default name for the bind splice. 8)Default attribute name for the bind tag. 9#Implementation of the bind splice. 789789789789None:(State for storing cache tag information ;Clears the cache tag state. €9Converts a TTL string into an integer number of seconds. <;Returns a function that modifies a HeistState to include a "cache" M tag. The cache tag is not bound automatically with the other default Heist I tags. This is because this function also returns CacheTagState, so the ( user will be able to clear it with the ; function. :¥Š;€§<:;<:<;:¥Š;€§<None=Name for the html splice. >GThe html splice runs all children and then traverses the returned node M forest removing all head nodes. Then it merges them all and prepends it to  the html tag's child list. ?%Extracts all heads from a node tree. =>?The root (html) node ;A tuple of a list of head nodes and the original tree with  heads removed. =>?=>?=>?NoneF&Default name for the markdown splice. G'Implementation of the markdown splice. @ABCDEFGHIJcommand to run any arguments standard input exitcode, stdout, stderr š©ª«¬­ @ABCDEFGHIJ DEBC@AFGHIJ@ABCDEFGHIJš©ª«¬­ None23456789:;<=>?@ABCDEFGHIJNoneK"Default name for the bind splice. L#Implementation of the bind splice. KLKLKLKLNone®%The default set of built-in splices. M An empty heist state, with Heist's default splices (<apply>,  <bind>, <ignore>, and <markdown>) mapped. The cache tag is I not mapped here because it must be mapped manually in your application. ®M2  !"#$%&'()*+,-./01<M2!"M 01#&$% '*+,-()./<®M NoneN:This splice binds convenience tags for the given JSON (or ) JSON-convertible) value and runs the tag's child nodes using the new  bindings. %Tags bound when you pass in an object ,Tags bound for an object looking like this:  ! { "k_1": v_1, ..., "k_N": v_N } < value:{k_i}> -- treats v_i as text  < snippet:{k_i}> -- treats v_i as HTML  < with:{k_i}>+ -- explodes v_i and runs its children < value var=" foo.bar.baz"/> -- walks the JSON tree to find  " foo.bar.baz" , and interprets it as a string  < snippet var=" foo.bar.baz"/>  < with var=" foo.bar.baz">...<with> )Tags bound when you pass in anything else <value/>* -- the given JSON value, as a string  <snippet/>: -- the given JSON value, parsed and spliced in as HTML ¯N°±²³Žµ¶·žNN ¯N°±²³Žµ¶·ž NoneO-Structure representing a template directory. PCreates and returns a new O wrapped in an Either for  error handling. QCreates and returns a new O, using the monad's fail  function on error. R Gets the  from a TemplateDirectory. S7Clears cached content and reloads templates from disk. ¹Prepends an error onto a Left. OºPQRS¹OPQRSOPQRSOºPQRS¹»                 ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ?@ABCDEFGHIJKLMNNOOPPQRSTUVWX Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n opqrpstpsupsvpsw x y z { | } ~  €  ‚ ƒ „  …  † † ‡ ˆ ‰ Š ‹ Œ  Ž  ‘’“ ” • – — ˜™š› œ  ž Ÿ   ¡ ¢ £ € ¥ Š §š©ª « ¬­®¯ ° ± ² ³ Ž µ ¶·ž¹º»ŒœŸ¿ÀÁ Â Ã Ä Å Æ Ç È É Ê Ë Ì ZÍ heist-0.8.2Text.Templating.Heist$Text.Templating.Heist.Splices.Ignore#Text.Templating.Heist.Splices.Apply"Text.Templating.Heist.Splices.Bind#Text.Templating.Heist.Splices.Cache"Text.Templating.Heist.Splices.Html&Text.Templating.Heist.Splices.Markdown(Text.Templating.Heist.Splices.BindStrict"Text.Templating.Heist.Splices.Json'Text.Templating.Heist.TemplateDirectoryText.Templating.Heist.TypesText.Templating.Heist.InternalText.Templating.Heist.SplicesHeistT HeistStateSpliceMIMETypeTemplate templateNames spliceNames evalHeistT getParamNodelocalParamNodegetsTSgetTSputTSmodifyTS restoreTSlocalTS ignoreTag ignoreImpl addOnLoadHook addPreRunHookaddPostRunHook bindSplice bindSplices textSplice runChildrenrunChildrenWithrunChildrenWithTransrunChildrenWithTemplatesrunChildrenWithText mapSplices lookupSplice hasTemplate setTemplates addTemplateaddXMLTemplate stopRecursion getContextgetTemplateFilePath runNodeList evalTemplate bindStrings bindString callTemplatecallTemplateWithTextrenderTemplaterenderWithArgsgetDoc getXMLDoc loadTemplatesaddTemplatePathPrefixapplyTag applyAttrrawApply applyNodes applyImplbindTagbindAttrbindImpl CacheTagStateclearCacheTagState mkCacheTaghtmlTaghtmlImpl extractHeadsNoMarkdownFileExceptionMarkdownExceptionPandocMissingException markdownTagmarkdownSplicepandocpandocBSreadProcessWithExitCode' bindStrictTagbindStrictImpldefaultHeistStatebindJsonTemplateDirectorynewTemplateDirectorynewTemplateDirectory'getDirectoryTSreloadTemplateDirectory _spliceMap _templateMap_recurse _curContext_recursionDepth _onLoadHook _preRunHook _postRunHook _doctypes_curTemplateFile SpliceMap TemplateMapTPathtemplateStateTyCon liftCatch liftCallCCtemplateMonadTyCon mtl-2.1.2Control.Monad.Reader.ClasslocalControl.Monad.State.Classgetsgetputmodify$fMonadContHeistT$fMonadErroreHeistT$fMonadReaderrHeistT$fMonadStatesHeistT$fMonadPlusHeistT$fAlternativeHeistT$fMonadFixHeistT$fMonadCatchIOHeistT$fMonadTransHeistT$fMonadIOHeistT $fMonadHeistT$fApplicativeHeistT$fFunctorHeistT runHeistT DocumentFiledfDocdfFile$fTypeable1HeistT$fTypeableHeistState$fEqHeistState$fMonoidHeistState ParserFunAttAST addDoctypesetCurTemplateFile text-0.11.2.3Data.Text.InternalText splitPathWithsplitLocalPathsplitTemplatePath singleLookup traversePathghc-prim GHC.TypesTruelookupTemplateinsertTemplate setContextrunNodeattSubstparseAtt attParsergetAttributeSplicemAX_RECURSION_DEPTH recurseSplice lookupAndRun fixDocTypexmlhtml-0.2.0.3Text.XmlHtml.CommonDocumentevalWithHooksInternal evalWithHooksblaze-builder-0.3.1.0'Blaze.ByteString.Builder.Internal.TypesBuilder getDocWith loadTemplaterunHookloadHookIdentLiteralmimeTypeparseTTLCTS cacheTagName cacheImpl"$fExceptionNoMarkdownFileException$fShowNoMarkdownFileException$fExceptionMarkdownException$fShowMarkdownException!$fExceptionPandocMissingException$fShowPandocMissingExceptiondefaultSpliceMap JsonMonad errorMessage withValue boolToText numToTextfindExprasHtml snippetTagvalueTag explodeTagleftPass