xw      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ [ \ ] ^ _ `abcdefghijklmnopqrstuvSafe wxyz{|}~x~ wxyz{|}~SafeSafe None0OT,For the stuff we only crudely parse for now.C8Walks an AST node calling the supplied visitor function.This is an in-order traversal.;For example, to implement a visitor which counts all nodes: A import Data.Monoid count = getSum $ walk (\_ -> 1) (Sum 0) treeHFor comparison, here is a (probably inefficient) alternative way using  instead of C: zimport Control.Lens.Operators import Control.Lens.Plated import Data.Data.Lens count = length $ tree ^.. cosmosOf uniplateAnother example; accumulating 5 nodes into a list:  accumulator node@(SubheadingAnnotation _) = [node] accumulator _ = [] -- skip everything else nodes = walk accumulator [] tree(Again, for comparison, the same without C(, this time using a list comprehension: import Control.Lens.Operators import Control.Lens.Plated import Data.Data.Lens [n | n@(SubheadingAnnotation _) <- tree ^.. cosmosOf uniplate]D<Sanitizes a link target similar to the way that GitHub does: Downcase.3Filter, keeping only letter, number, space, hyphen.Change spaces to hyphens.AUniquify by appending "-1", "-2", "-3" etc (not yet implemented).We use this both for generating GitHub friendly link targets, and for auto-generating new link targets for use inside Vim help files.Source: =https://gist.github.com/asabaylus/3071099#gistcomment-1593627?  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEF> ' !"#$%&()*+,-./0123456879:;<=>?@ABCDE? !"#$%&'()*+,-./0123456789:;<=>?@AB F CDE  1 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFNone:Given a  descriptiont like "fu[nction]", returns a parser that matches "fu", "fun", "func", "funct", "functi", "functio" and "function".4Beware, may explode at runtime if passed an invalid  description, due to the use of .XRequires the FlexibleContexts extension, for reasons that I don't yet fully understand.@Newline (and slurps up following horizontal whitespace as well).BWhitespace (specifically, horizontal whitespace: spaces and tabs).!Continuation-aware whitespace ().'Optional bang suffix for VimL commands.tEnd-of-statement. TODO: see `:h :bar` for a list of commands which see | as an arg instead of a command separator.zUsed in lookahead rules to make sure that we don't greedily consume special tokens as if they were just phrasing content..Appends a Whitespace token to a list of nodes.Compress whitespace. Consecutive Whitespace tokens are replaced with a single token. If a run of whitespace includes a BreakTag, the run is replaced with the BreakTag.Case-insensitive char match. Based on caseChar function in: _https://hackage.haskell.org/package/hsemail-1.3/docs/Text-ParserCombinators-Parsec-Rfc2234.htmlCase-insensitive string match. Based on  caseString function in: _https://hackage.haskell.org/package/hsemail-1.3/docs/Text-ParserCombinators-Parsec-Rfc2234.htmlTokenized whitespace.Most whitespace is insignificant and gets omitted from the AST, but whitespace inside "phrasing content" is significant so is preserved (in normalized form) in the AST.\Generic VimL node parser to represent stuff that we haven't built out full parsing for yet.cRemainder of the line up to but not including a newline. Does not include any trailing whitespace.P&Strip trailing and leading whitespace.+Not efficient, but chosen for readablility.!TODO: switch to Data.Text (http:/stackoverflow.coma62703822103996) for efficiency. Strip leading (left) whitespace.Q"Strip trailing (right) whitespace.,Match a "word" of non-whitespace characters.R6Parses a translation unit (file contents) into an AST.6PQRSPQRSSQPR6PQRSNoneTOptimize, a Project's AST by eliminating empty paths.MMarks a node for pruning by returning Empty if it has no non-Empty children.4Returns True if the supplied node is the Empty node.HReturns True if the supplied node is a (potentially) prunable container.TTTTNone:[U0Returns True if a node marks the end of a regionblocksection.UVWUVWUVWUVWNone[X:Extracts a list of nodes (if any exist) identified by the  `@command` annotation of the source code.XXXXNoneY1Extracts a list of nodes (if any exist) from the  `@commands` section(s) of the source code.'It is not recommended to have multiple  `@commands` sections in a project. If multiple such sections (potentially across multiple translation units) exist, there are no guarantees about order; they just get concatenated in the order we see them.YYYY NoneZ1Extracts a list of nodes (if any exist) from the  `@footer` section(s) of the source code.It is not recommended to have multiple footers in a project. If multiple footers (potentially across multiple translation units) exist, there are no guarantees about order but they just get concatenated in the order we see them.ZZZZ None[[:Extracts a list of nodes (if any exist) identified by the  `@function` annotation of the source code.[[[[ None\1Extracts a list of nodes (if any exist) from the  `@functions` section(s) of the source code.'It is not recommended to have multiple  `@functions` sections in a project. If multiple such sections (potentially across multiple translation units) exist, there are no guarantees about order; they just get concatenated in the order we see them.\\\\ None]NReturns a list of all headings, in the order in which they appear in the AST.^2Injects a table of contents immediately after any ( in an AST (note: there should only be one). TODO: warn or error if there is more than one. or use a monadic variant of transform to do only the first...]^]^]^]^ None[_:Extracts a list of nodes (if any exist) identified by the  `@mapping` annotation of the source code.____None`1Extracts a list of nodes (if any exist) from the  `@mappings` section(s) of the source code.'It is not recommended to have multiple  `@mappings` sections in a project. If multiple such sections (potentially across multiple translation units) exist, there are no guarantees about order; they just get concatenated in the order we see them.````None[a:Extracts a list of nodes (if any exist) identified by the  `@option` annotation of the source code.aaaaNoneb1Extracts a list of nodes (if any exist) from the  `@options` section(s) of the source code.'It is not recommended to have multiple  `@options` sections in a project. If multiple such sections (potentially across multiple translation units) exist, there are no guarantees about order; they just get concatenated in the order we see them.bbbbNone[c<Returns the name of the plug-in or Nothing if none is found.%In the event that there are multiple  `@plugin`U annotations competing to define the name of plugin, the first encountered one wins.d1Extracts a list of nodes (if any exist) from the  `@plugin` section(s) of the source code.'It is not recommended to have multiple  `@plugin` sections in a project. If multiple such sections (potentially across multiple translation units) exist, there are no guarantees about order; they just get concatenated in the order we see them.cdcdcdcdNone\)Helper function that appends and updates 6 context, hard-wrapping if necessary to remain under .)Helper function that appends and updates - context uncontitionally (no hard-wrapping).Append a newline.+eee#eNone:\6Walks the supplied AST detecting whether it contains  `@commands` `@command`,  `@functions` `@function`,  `@mappings`/ `@mapping` or  `@options`/ `@options` sections.&Will be used as follows: - DO have (commands? -> do nothing - DON'T have hcommands but DO have @command? -> Synthesize CommandsAnnotation - DON'T we have either? -> do nothing?Appends a node, wrapped in a DocBlock, to the end of a Project.ghijghijghij ghijNonekCompile+ a set of translation units into a project.kkkkNonellllNoneAppend a newline.Wraps a string in `<code>``<>code>` tags. TODO: remember why I'm not using backticks here.  m   mm  m   None\nnnnNoneo-Parse a string containing a translation unit.pCParse and compile a list of strings containing a translation units.qConvenience function: Parse and compile a list of strings containing translation units, but always returns a string even in the case of an error.rBPretty-prints the result of parsing and compiling an input string.1To facilitate quick testing in the REPL; example:pp "unlet g:var"s?Parse and compile a list of input strings into Vim help format.tiPretty-prints the result of parsing and compiling an input string and transforming into Vim help format.For logging in the REPL.uDParse and compile a list of input strings into Markdown help format.viPretty-prints the result of parsing and compiling an input string and transforming into Markdown format.For logging in the REPL.opqrstuvopqrstuvpqourvtsopqrstuv !"#$%&'(())*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqr s t u v w xyz{|}~     %docvim-0.3.1.2-6sNcXrhwUpI5dyjZBoetjdText.Docvim.ReadDirText.Docvim.OptionsText.Docvim.ASTText.Docvim.ParseText.Docvim.OptimizeText.Docvim.VisitorText.Docvim.Visitor.CommandText.Docvim.Visitor.CommandsText.Docvim.Visitor.FooterText.Docvim.Visitor.FunctionText.Docvim.Visitor.FunctionsText.Docvim.Visitor.HeadingText.Docvim.Visitor.MappingText.Docvim.Visitor.MappingsText.Docvim.Visitor.OptionText.Docvim.Visitor.OptionsText.Docvim.Visitor.PluginText.Docvim.Printer.VimText.Docvim.Visitor.SectionText.Docvim.CompileText.Docvim.Visitor.SymbolText.Docvim.Printer.MarkdownText.Docvim.CLIText.Docvim.Util Paths_docvim Control.LensPlatedreadDirOptionsoutfilesdebug directoryverboseoptions ParametersTypeName DescriptionDefaultArgument ArgumentListNodeProjectUnitEmptyFunctionDeclaration LetStatementLexprStatementLwindowStatementUnletStatementGenericStatementDocBlock Paragraph LinkTargetsListListItem BlockquoteFenced Separator PlaintextBreakTagLinkCode WhitespacePluginAnnotationFunctionsAnnotationFunctionAnnotationIndentAnnotationDedentAnnotationCommandsAnnotationCommandAnnotationFooterAnnotationMappingsAnnotationMappingAnnotationOptionsAnnotationOptionAnnotationHeadingAnnotationSubheadingAnnotationTOC functionBang functionNamefunctionArgumentsfunctionAttributes functionBodyletLexprletValue lexprBang lexprExpr lwindowHeight unletBang unletBodywalksanitizeAnchor invalidNode $fPlatedNode$fDataArgument $fEqArgument$fShowArgument$fDataArgumentList$fEqArgumentList$fShowArgumentList $fDataNode$fEqNode $fShowNodestriprstripunitparseoptimize endSectionextract extractBlocksextractCommandextractCommands extractFooterextractFunctionextractFunctions getHeadings injectTOCextractMappingextractMappings extractOptionextractOptions getPluginName extractPluginvimHelp$fShowSectionInfoinjectCommandsinjectFunctionsinjectMappings injectOptionscompile getSymbolsmarkdownrun parseUnit compileUnitsppppvppvpmppmcatchIOversionbindirlibdirdatadir libexecdir sysconfdir getBinDir getLibDir getDataDir getLibexecDir getSysconfDirgetDataFileName parseOutfiles parseDebugparseDirectory parseVerbose parseOptionscommandbaseGHC.ListinitnewlinewswscbangeosspecialappendWhitespacecompresschar'string' whitespacegenericStatement restOfLinelstripwordfunction endfunction lStatementlwindowlexpr letStatementunletquote commentStart docBlockStart separatorfenced blockquotelistlistItemnewlinescommentnodedocBlock paragraph paragraphBodyphrasing plaintextbrlinkcode linkTargetsvimLblock statementheading subheading annotation skippablepruneempty container postorderappend partialLine textwidth appendNoWrapnlEnvContext lineBreakMetadata pluginName OperationAppendDeleteSlurpappend'mapTuplehardwrapslurpdefaultLineBreaknodespluginbreaktaglistitemtocmappingoption normalizesanitizetarget rightAlign renderedWidthgetSectionInfoinject SectionInfo _hasCommand _hasCommands _hasFunction _hasFunctions _hasMapping _hasMappings _hasOption _hasOptions hasCommand hasCommands hasFunction hasFunctions hasMapping hasMappings hasOption hasOptionsdefaultSectionInfocodify AttributeAnchorsymbolsh1h2h3aattributesString gitHubAnchor hasExtension isMarkdownisText isVimScript