README: document nit_env.sh
[nit.git] / src / nitdoc.nit
1 # This file is part of NIT ( http://www.nitlanguage.org ).
2 #
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
6 #
7 # http://www.apache.org/licenses/LICENSE-2.0
8 #
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
14
15 # Documentation generator for the nit language.
16 #
17 # Generate API documentation in HTML format from nit source code.
18 module nitdoc
19
20 import modelbuilder
21 import doc
22
23 redef class ToolContext
24 # Nitdoc generation phase.
25 var docphase: Phase = new Nitdoc(self, null)
26
27 init do super # to fix ambiguous linearization
28 end
29
30 # Nitdoc phase explores the model and generate pages for each mentities found
31 private class Nitdoc
32 super Phase
33 redef fun process_mainmodule(mainmodule, mmodules)
34 do
35 var doc = new DocModel(mainmodule.model, mainmodule)
36
37 var phases = [
38 new ExtractionPhase(toolcontext, doc),
39 new IndexingPhase(toolcontext, doc),
40 new MakePagePhase(toolcontext, doc),
41 new POSetPhase(toolcontext, doc),
42 new ConcernsPhase(toolcontext, doc),
43 new StructurePhase(toolcontext, doc),
44 new InheritanceListsPhase(toolcontext, doc),
45 new IntroRedefListPhase(toolcontext, doc),
46 new LinListPhase(toolcontext, doc),
47 new GraphPhase(toolcontext, doc),
48 new ReadmePhase(toolcontext, doc),
49 new RenderHTMLPhase(toolcontext, doc),
50 new DocTestPhase(toolcontext, doc): DocPhase]
51
52 for phase in phases do
53 toolcontext.info("# {phase.class_name}", 1)
54 phase.apply
55 end
56 end
57 end
58
59 # build toolcontext
60 var toolcontext = new ToolContext
61 var tpl = new Template
62 tpl.add "Usage: nitdoc [OPTION]... <file.nit>...\n"
63 tpl.add "Generates HTML pages of API documentation from Nit source files."
64 toolcontext.tooldescription = tpl.write_to_string
65
66 # process options
67 toolcontext.process_options(args)
68 var arguments = toolcontext.option_context.rest
69
70 # build model
71 var model = new Model
72 var mbuilder = new ModelBuilder(model, toolcontext)
73 var mmodules = mbuilder.parse_full(arguments)
74
75 # process
76 if mmodules.is_empty then return
77 mbuilder.run_phases
78 toolcontext.run_global_phases(mmodules)