+ var sections = new ArrayMap[MModule, Array[MModule]]
+ for mmodule in concern2meths.keys do
+ var owner = mmodule.public_owner
+ if owner == null then owner = mmodule
+ if not sections.has_key(owner) then sections[owner] = new Array[MModule]
+ if owner != mmodule then sections[owner].add(mmodule)
+ end
+ append("<section class='concerns'>")
+ append("<h2 class='section-header'>Concerns</h2>")
+ append("<ul>")
+ for owner, mmodules in sections do
+ var nowner = mbuilder.mmodule2nmodule[owner]
+ append("<li>")
+ if nowner.short_comment.is_empty then
+ append("<a href=\"#{owner.anchor}\">{owner.name}</a>")
+ else
+ append("<a href=\"#{owner.anchor}\">{owner.name}</a>: {nowner.short_comment}")
+ end
+ if not mmodules.is_empty then
+ append("<ul>")
+ for mmodule in mmodules do
+ var nmodule = mbuilder.mmodule2nmodule[mmodule]
+ if nmodule.short_comment.is_empty then
+ append("<li><a href=\"#{mmodule.anchor}\">{mmodule.name}</a></li>")
+ else
+ append("<li><a href=\"#{mmodule.anchor}\">{mmodule.name}</a>: {nmodule.short_comment}</li>")
+ end
+ end
+ append("</ul>")
+ end
+ append("</li>")
+ end
+ append("</ul>")
+ append("</section>")
+ # properties
+ var prop_sorter = new ComparableSorter[MPropDef]
+ var sorterprop = new ComparableSorter[MProperty]
+ var sorterc = new ComparableSorter[MClass]
+ var lmmodule = new List[MModule]
+ # virtual and formal types
+ var local_vtypes = new Array[MVirtualTypeDef]
+ for vt in vtypes do if not inherited.has(vt) then local_vtypes.add(vt)
+ if local_vtypes.length > 0 or mclass.arity > 0 then
+ append("<section class='types'>")
+ append("<h2>Formal and Virtual Types</h2>")
+ # formal types
+ if mclass.arity > 0 and nclass isa AStdClassdef then
+ for ft, bound in mclass.parameter_types do
+ append("<article id='FT_{ft}'>")
+ append("<h3 class='signature'>{ft}: {bound.link(mbuilder)}</h3>")
+ append("<div class=\"info\">formal generic type</div>")
+ append("</article>")
+ end
+ end
+ # virtual types
+ prop_sorter.sort(local_vtypes)
+ for prop in local_vtypes do append(prop.html_full_desc(self))
+ append("</section>")
+ end
+ # constructors
+ var local_consts = new Array[MMethodDef]
+ for const in consts do if not inherited.has(const) then local_consts.add(const)
+ prop_sorter.sort(local_consts)
+ if local_consts.length > 0 then
+ append("<section class='constructors'>")
+ append("<h2 class='section-header'>Constructors</h2>")
+ for prop in local_consts do append(prop.html_full_desc(self))
+ append("</section>")
+ end
+ # methods
+ if not concern2meths.is_empty then
+ append("<section class='methods'>")
+ append("<h2 class='section-header'>Methods</h2>")
+ for owner, mmodules in sections do
+ append("<a id=\"{owner.anchor}\"></a>")
+ if owner != mclass.intro_mmodule and owner != mclass.public_owner then
+ var nowner = mbuilder.mmodule2nmodule[owner]
+ append("<h3 class=\"concern-toplevel\">Methods refined in {owner.link(mbuilder)}</h3>")
+ if nowner.short_comment.is_empty then
+ append("<p class=\"concern-doc\">{owner.link(mbuilder)}</p>")
+ else
+ append("<p class=\"concern-doc\">{owner.link(mbuilder)}: {nowner.short_comment}</p>")
+ end
+ end
+ if concern2meths.has_key(owner) then
+ var mmethods = concern2meths[owner]
+ prop_sorter.sort(mmethods)
+ for prop in mmethods do append(prop.html_full_desc(self))
+ end
+ for mmodule in mmodules do
+ append("<a id=\"{mmodule.anchor}\"></a>")
+ var nmodule = mbuilder.mmodule2nmodule[mmodule]
+ if mmodule != mclass.intro_mmodule and mmodule != mclass.public_owner then
+ if nmodule.short_comment.is_empty then
+ append("<p class=\"concern-doc\">{mmodule.link(mbuilder)}</p>")
+ else
+ append("<p class=\"concern-doc\">{mmodule.link(mbuilder)}: {nmodule.short_comment}</p>")
+ end
+ end
+ var mmethods = concern2meths[mmodule]
+ prop_sorter.sort(mmethods)
+ for prop in mmethods do append(prop.html_full_desc(self))
+ end
+ end
+ end
+ # inherited properties
+ if inherited.length > 0 then
+ var sorted_inherited = new Array[MPropDef]
+ sorted_inherited.add_all(inherited)
+ nitdoc.mainmodule.linearize_mpropdefs(sorted_inherited)
+ var classes = new ArrayMap[MClass, Array[MPropDef]]
+ for mmethod in sorted_inherited.reversed do
+ var mclass = mmethod.mclassdef.mclass
+ if not classes.has_key(mclass) then classes[mclass] = new Array[MPropDef]
+ classes[mclass].add(mmethod)
+ end
+ append("<h3>Inherited Properties</h3>")
+ for c, mmethods in classes do
+ prop_sorter.sort(mmethods)
+ append("<p>Defined in {c.link(mbuilder)}: ")
+ for i in [0..mmethods.length[ do
+ var mmethod = mmethods[i]
+ append(mmethod.link(mbuilder))
+ if i <= mmethods.length - 1 then append(", ")
+ end
+ append("</p>")
+ end
+ end
+ append("</section>")