X-Git-Url: http://nitlanguage.org diff --git a/src/nitdoc.nit b/src/nitdoc.nit index c2f25bf..159c771 100644 --- a/src/nitdoc.nit +++ b/src/nitdoc.nit @@ -13,34 +13,83 @@ # 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 -# process options +redef class ToolContext + # Nitdoc generation phase. + var docphase: Phase = new Nitdoc(self, null) + + # Do not generate documentation for attributes. + var opt_no_attributes = new OptionBool("Ignore the attributes", "--no-attributes") + + # Do not generate documentation for private properties. + var opt_private = new OptionBool("Also generate private API", "--private") + + redef init do + super + option_context.add_option(opt_no_attributes, opt_private) + end +end + +# Nitdoc phase explores the model and generate pages for each mentities found +private class Nitdoc + super Phase + redef fun process_mainmodule(mainmodule, mmodules) + do + var min_visibility = private_visibility + if not toolcontext.opt_private.value then min_visibility = protected_visibility + var accept_attribute = true + if toolcontext.opt_no_attributes.value then accept_attribute = false + + var filters = new ModelFilter( + min_visibility, + accept_attribute = accept_attribute, + accept_fictive = false) + var doc = new DocModel(mainmodule.model, mainmodule, filters) + + var phases = [ + 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), + new RenderHTMLPhase(toolcontext, doc), + new DocTestPhase(toolcontext, doc): DocPhase] + + for phase in phases do + toolcontext.info("# {phase.class_name}", 1) + phase.apply + end + end +end + +# build toolcontext var toolcontext = new ToolContext -var ctx = new NitdocContext(toolcontext) -ctx.process_options(args) -var arguments = ctx.toolcontext.option_context.rest +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 # build model var model = new Model -var mbuilder = new ModelBuilder(model, ctx.toolcontext) -var mmodules = mbuilder.parse(arguments) +var mbuilder = new ModelBuilder(model, toolcontext) +var mmodules = mbuilder.parse_full(arguments) +# process if mmodules.is_empty then return mbuilder.run_phases -var mainmodule: MModule -if mmodules.length == 1 then - mainmodule = mmodules.first -else - mainmodule = new MModule(model, null, "
", new Location(null, 0, 0, 0, 0)) - mainmodule.is_fictive = true - mainmodule.set_imported_mmodules(mmodules) -end - -# generate doc -var nitdoc = new Nitdoc(ctx, model, mainmodule) -nitdoc.generate - +toolcontext.run_global_phases(mmodules)