]> git.wincent.com - docvim.git/blob - lib/Docvim/Compile.hs
aea83da8cf1b5eaf00b35dd4d1da915c8868ef06
[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.Section
15 import Docvim.Visitor (extract)
16
17 -- | "Compile" a set of translation units into a project.
18 compile :: [Node] -> Node
19 compile ns = do
20   let ast = foldr (\f x -> f x) (Project ns) [ injectCommands
21                                              , injectFunctions
22                                              , injectMappings
23                                              , injectOptions
24                                              ]
25   let (ast2, footer) = extract extractFooter ast
26   let (ast3, plugin) = extract extractPlugin ast2
27   let (ast4, commands) = extract extractCommands ast3
28   let (ast5, command) = extract extractCommand ast4
29   let (ast6, functions) = extract extractFunctions ast5
30   let (ast7, function) = extract extractFunction ast6
31   let (ast8, mappings) = extract extractMappings ast7
32   let (ast9, mapping) = extract extractMapping ast8
33   let (ast10, options) = extract extractOptions ast9
34   let (ast11, option) = extract extractOption ast10
35   let project = Project $ concat [ plugin
36                                  , [ast11]
37                                  , commands
38                                  , command
39                                  , mappings
40                                  , mapping
41                                  , options
42                                  , option
43                                  , functions
44                                  , function
45                                  , footer
46                                  ]
47   project