X-Git-Url: http://nitlanguage.org diff --git a/src/nitdoc.nit b/src/nitdoc.nit index c1a4851..bda79e7 100644 --- a/src/nitdoc.nit +++ b/src/nitdoc.nit @@ -13,28 +13,87 @@ # limitations under the License. # Documentation generator for the nit language. +# # Generate API documentation in HTML format from nit source code. module nitdoc import modelbuilder import doc +import counter redef class ToolContext - var docphase: Phase = new NitdocPhase(self, null) + # Nitdoc generation phase. + var docphase: Phase = new Nitdoc(self, null) + + # File pattern used to link documentation to source code. + var opt_test = new OptionBool("do not render anything, only print test data", "--test") + + redef init do + super + option_context.add_option(opt_test) + end end -private class NitdocPhase +# Nitdoc phase explores the model and generate pages for each mentities found +private class Nitdoc super Phase redef fun process_mainmodule(mainmodule, mmodules) do - # generate doc - var nitdoc = new Nitdoc(toolcontext, mainmodule.model, mainmodule) - nitdoc.generate + var doc = new DocModel(mainmodule.model, mainmodule) + + var phases = [ + new ExtractionPhase(toolcontext, doc), + new IndexingPhase(toolcontext, doc), + new MakePagePhase(toolcontext, doc), + new POSetPhase(toolcontext, doc), + new ConcernsPhase(toolcontext, doc), + new StructurePhase(toolcontext, doc), + new InheritanceListsPhase(toolcontext, doc), + new IntroRedefListPhase(toolcontext, doc), + new LinListPhase(toolcontext, doc), + new GraphPhase(toolcontext, doc), + new ReadmePhase(toolcontext, doc): DocPhase] + + if not toolcontext.opt_test.value then + phases.add new RenderHTMLPhase(toolcontext, doc) + end + + for phase in phases do + toolcontext.info("# {phase.class_name}", 1) + phase.apply + end + + if toolcontext.opt_test.value then + # Pages metrics + var page_counter = new Counter[String] + var pages = doc.pages.keys.to_a + default_comparator.sort(pages) + for title in pages do + var page = doc.pages[title] + page_counter.inc page.class_name + print page.pretty_print.write_to_string + end + print "Generated {doc.pages.length} pages" + page_counter.print_elements(100) + # Model metrics + var model_counter = new Counter[String] + for mentity in doc.mentities do + model_counter.inc mentity.class_name + end + print "Found {doc.mentities.length} mentities" + model_counter.print_elements(100) + end end end -# process options +# build toolcontext var toolcontext = new ToolContext +var tpl = new Template +tpl.add "Usage: nitdoc [OPTION]... ...\n" +tpl.add "Generates HTML pages of API documentation from Nit source files." +toolcontext.tooldescription = tpl.write_to_string + +# process options toolcontext.process_options(args) var arguments = toolcontext.option_context.rest @@ -43,6 +102,7 @@ var model = new Model var mbuilder = new ModelBuilder(model, toolcontext) var mmodules = mbuilder.parse_full(arguments) +# process if mmodules.is_empty then return mbuilder.run_phases toolcontext.run_global_phases(mmodules)