]> git.wincent.com - docvim.git/blob - lib/Docvim/Compile.hs
Initial cut at @mapping, @command, @option, @function
[docvim.git] / lib / Docvim / Compile.hs
1 module Docvim.Compile (compile) where
2
3 import Docvim.AST (Node(Project))
4 import Docvim.Visitor.Command (extractCommand)
5 import Docvim.Visitor.Commands (extractCommands)
6 import Docvim.Visitor.Footer (extractFooter)
7 import Docvim.Visitor.Function (extractFunction)
8 import Docvim.Visitor.Functions (extractFunctions)
9 import Docvim.Visitor.Mapping (extractMapping)
10 import Docvim.Visitor.Mappings (extractMappings)
11 import Docvim.Visitor.Option (extractOption)
12 import Docvim.Visitor.Options (extractOptions)
13 import Docvim.Visitor.Plugin (extractPlugin)
14 import Docvim.Visitor (extract)
15
16 -- | "Compile" a set of translation units into a project.
17 compile :: [Node] -> Node
18 compile ns = do
19   let (ast, footer) = extract extractFooter $ Project ns
20   let (ast2, plugin) = extract extractPlugin ast
21   let (ast3, commands) = extract extractCommands ast2
22   let (ast4, command) = extract extractCommand ast3
23   let (ast5, functions) = extract extractFunctions ast4
24   let (ast6, function) = extract extractFunction ast5
25   let (ast7, mappings) = extract extractMappings ast6
26   let (ast8, mapping) = extract extractMapping ast7
27   let (ast9, options) = extract extractOptions ast8
28   let (ast10, option) = extract extractOption ast9
29   let project = Project $ concat [ plugin
30                                  , [ast6]
31                                  , commands
32                                  , command
33                                  , mappings
34                                  , mapping
35                                  , options
36                                  , option
37                                  , functions
38                                  , function
39                                  , footer
40                                  ]
41   project