+
+ fun html_inheritance(page: NitdocClass): String do
+ var res = new Buffer
+ # definitions block
+ res.append("<p class='info'>")
+ page.nitdoc.mainmodule.linearize_mpropdefs(mproperty.mpropdefs)
+ var previous_defs = new Array[MPropDef]
+ var next_defs = new Array[MPropDef]
+ var self_passed = false
+ for def in mproperty.mpropdefs do
+ if def == self then
+ self_passed = true
+ continue
+ end
+ if not self_passed then
+ if not page.mclass.ancestors.has(def.mclassdef.mclass) then continue
+ if def.is_intro then continue
+ previous_defs.add(def)
+ else
+ if not page.mclass.descendants.has(def.mclassdef.mclass) then continue
+ next_defs.add(def)
+ end
+ end
+ var source = ""
+ if page.mbuilder.mpropdef2npropdef.has_key(self) then
+ source = " {page.show_source(page.mbuilder.mpropdef2npropdef[self].location)}"
+ end
+ res.append("defined by {mclassdef.mmodule.html_full_namespace(page.mbuilder)}{source}")
+ if not is_intro then
+ source = ""
+ if page.mbuilder.mpropdef2npropdef.has_key(mproperty.intro) then
+ source = " {page.show_source(page.mbuilder.mpropdef2npropdef[mproperty.intro].location)}"
+ end
+ res.append(", introduced by {mproperty.intro.mclassdef.mclass.link(page.mbuilder)}{source}")
+ end
+ if not previous_defs.is_empty then
+ res.append(", inherited from ")
+ for i in [0..previous_defs.length[ do
+ var def = previous_defs[i]
+ source = ""
+ if page.mbuilder.mpropdef2npropdef.has_key(def) then
+ source = " {page.show_source(page.mbuilder.mpropdef2npropdef[def].location)}"
+ end
+ res.append("{def.mclassdef.mclass.link(page.mbuilder)}{source}")
+ if i < previous_defs.length - 1 then res.append(", ")
+ end
+ end
+ if not next_defs.is_empty then
+ res.append(", redefined by ")
+ for i in [0..next_defs.length[ do
+ var def = next_defs[i]
+ source = ""
+ if page.mbuilder.mpropdef2npropdef.has_key(def) then
+ source = " {page.show_source(page.mbuilder.mpropdef2npropdef[def].location)}"
+ end
+ res.append("{def.mclassdef.mclass.link(page.mbuilder)}{source}")
+ if i < next_defs.length - 1 then res.append(", ")
+ end
+ end
+ res.append(".</p>")
+ return res.to_s
+ end