X-Git-Url: http://nitlanguage.org diff --git a/src/ni_nitdoc.nit b/src/ni_nitdoc.nit index 4548e0f..24887b4 100644 --- a/src/ni_nitdoc.nit +++ b/src/ni_nitdoc.nit @@ -28,6 +28,7 @@ class Nitdoc private var arguments: Array[String] private var destinationdir: nullable String private var sharedir: nullable String + private var source: nullable String private var opt_dir = new OptionString("Directory where doc is generated", "-d", "--dir") private var opt_source = new OptionString("What link for source (%f for filename, %l for first line, %L for last line)", "--source") @@ -38,10 +39,12 @@ class Nitdoc # We need a model to collect stufs self.toolcontext = toolcontext self.arguments = toolcontext.option_context.rest + toolcontext.option_context.options.clear toolcontext.option_context.add_option(opt_dir) toolcontext.option_context.add_option(opt_source) toolcontext.option_context.add_option(opt_sharedir) toolcontext.option_context.add_option(opt_nodot) + toolcontext.process_options process_options if arguments.length < 1 then @@ -86,6 +89,11 @@ class Nitdoc abort end end + if not opt_source.value is null then + source = "" + else + source = opt_source.value + end end fun start do @@ -97,11 +105,12 @@ class Nitdoc fullindex modules classes + quicksearch_list end end fun overview do - var overviewpage = new NitdocOverview.with(modelbuilder.nmodules, self.opt_nodot.value, destinationdir.to_s) + var overviewpage = new NitdocOverview.with(modelbuilder, self.opt_nodot.value, destinationdir.to_s) overviewpage.save("{destinationdir.to_s}/index.html") end @@ -120,24 +129,57 @@ class Nitdoc fun classes do for amodule in modelbuilder.nmodules do for mclass, aclassdef in amodule.mclass2nclassdef do - var classpage = new NitdocMClasses.with(mclass, aclassdef) + mclass.amodule(modelbuilder.mmodule2nmodule) + mclass.mmethod(aclassdef.mprop2npropdef) + var classpage = new NitdocMClasses.with(mclass, aclassdef, source) classpage.save("{destinationdir.to_s}/{mclass.name}.html") end end end + # Generate QuickSearch file + fun quicksearch_list do + var file = new OFStream.open("{destinationdir.to_s}/quicksearch-list.js") + var content = new Buffer + content.append("var entries = \{ ") + for prop in model.mproperties do + if not prop isa MMethod then continue + content.append("\"{prop.name}\": [") + for propdef in prop.mpropdefs do + content.append("\{txt: \"{propdef.mproperty.full_name}\", url:\"{propdef.mproperty.link_anchor}\" \}") + if not propdef is prop.mpropdefs.last then content.append(", ") + end + content.append("]") + content.append(", ") + end + + for mclass in model.mclasses do + content.append("\"{mclass.name}\": [") + for mclassdef in mclass.mclassdefs do + content.append("\{txt: \"{mclassdef.mclass.full_name}\", url:\"{mclass.link_anchor}\" \}") + if not mclassdef is mclass.mclassdefs.last then content.append(", ") + end + content.append("]") + if not mclass is model.mclasses.last then content.append(", ") + end + + content.append(" \};") + file.write(content.to_s) + file.close + end + end class NitdocOverview super NitdocPage - var amodules: Array[AModule] + var mbuilder: ModelBuilder # Init with Array[AModule] to get all ifnormations about each MModule containt in a program # opt_nodot to inform about the graph gen # destination: to know where will be saved dot files - init with(modules: Array[AModule], opt_nodot: Bool, destination: String) do - self.amodules = modules + init with(mbuilder: ModelBuilder, opt_nodot: Bool, destination: String) do + self.mbuilder = mbuilder self.opt_nodot = opt_nodot self.destinationdir = destination end @@ -220,32 +262,47 @@ class NitdocOverview end fun add_modules do - var ls = new List[nullable MModule] - for amodule in amodules do - var mmodule = amodule.mmodule.public_owner - if mmodule != null and not ls.has(mmodule) then - open("li") - add("a").attr("href", "{mmodule.name}.html").text("{mmodule.to_s} ") - add_html(amodule.comment) - close("li") - ls.add(mmodule) - end + var mmodules = list_mmodules + var sorted = new Array[MModule].from(mmodules) + var sorter = new ComparableSorter[MModule] + sorter.sort(sorted) + for mmodule in sorted do + var amodule = mbuilder.mmodule2nmodule[mmodule] + open("li") + add("a").attr("href", "{mmodule.name}.html").text("{mmodule.to_s} ") + add_html(amodule.short_comment) + close("li") end end fun process_generate_dot do var op = new Buffer op.append("digraph dep \{ rankdir=BT; node[shape=none,margin=0,width=0,height=0,fontsize=10]; edge[dir=none,color=gray]; ranksep=0.2; nodesep=0.1;\n") - for amodule in amodules do - op.append("\"{amodule.mmodule.name}\"[URL=\"{amodule.mmodule.name}.html\"];\n") - for mmodule2 in amodule.mmodule.in_importation.direct_greaters do - op.append("\"{amodule.mmodule.name}\"->\"{mmodule2.name}\";\n") + for mmodule in list_mmodules do + op.append("\"{mmodule.name}\"[URL=\"{mmodule.name}.html\"];\n") + for imported in mmodule.in_importation.direct_greaters do + if imported.direct_owner == null then + op.append("\"{mmodule.name}\"->\"{imported.name}\";\n") + end end end op.append("\}\n") generate_dot(op.to_s, "dep", "Modules hierarchy") end + private fun list_mmodules: Set[MModule] do + var mmodules = new HashSet[MModule] + for mmodule in mbuilder.model.mmodules do + var owner = mmodule.public_owner + if owner != null then + mmodules.add(owner) + else + mmodules.add(mmodule) + end + end + return mmodules + end + end class NitdocFullindex @@ -336,10 +393,13 @@ class NitdocFullindex # Add to content modules column fun module_column do var ls = new List[nullable MModule] + var sorted = mmodules + var sorterp = new ComparableSorter[MModule] + sorterp.sort(sorted) open("article").add_class("modules filterable") add("h2").text("Modules") open("ul") - for mmodule in mmodules do + for mmodule in sorted do if mmodule.public_owner != null and not ls.has(mmodule.public_owner) then ls.add(mmodule.public_owner) open("li") @@ -353,11 +413,14 @@ class NitdocFullindex # Add to content classes modules fun classes_column do + var sorted = mmodules.first.imported_mclasses.to_a + var sorterp = new ComparableSorter[MClass] + sorterp.sort(sorted) open("article").add_class("classes filterable") add("h2").text("Classes") open("ul") - for mclass in mmodules.first.imported_mclasses do + for mclass in sorted do open("li") add("a").attr("href", "{mclass.name}.html").text(mclass.name) close("li") @@ -372,8 +435,13 @@ class NitdocFullindex open("article").add_class("properties filterable") add("h2").text("Properties") open("ul") + var sorted_imported = mmodules.first.imported_methods.to_a + var sorted_redef = mmodules.first.redef_methods.to_a + var sorterp = new ComparableSorter[MProperty] + sorterp.sort(sorted_imported) + sorterp.sort(sorted_redef) - for method in mmodules.first.imported_methods do + for method in sorted_imported do if method.visibility is none_visibility or method.visibility is intrude_visibility then continue open("li").add_class("intro") add("span").attr("title", "introduction").text("I") @@ -382,7 +450,7 @@ class NitdocFullindex close("li") end - for method in mmodules.first.redef_methods do + for method in sorted_redef do if method.visibility is none_visibility or method.visibility is intrude_visibility then continue open("li").add_class("redef") add("span").attr("title", "redefinition").text("R") @@ -508,7 +576,10 @@ class NitdocModules add("h3").text("Module Hierarchy").attr("style","cursor: pointer;") if mmodule.in_importation.direct_greaters.length > 0 then add_html("

All dependencies