- # URL to nitdoc page
- # module_owner_name.html
- private fun url: String do
- if url_cache == null then
- var res = new Buffer
- res.append("module_")
- var mowner = public_owner
- if mowner != null then
- res.append("{public_owner.name}_")
- end
- res.append("{self.name}.html")
- url_cache = res.to_s
- end
- return url_cache.as(not null)
- end
- private var url_cache: nullable String
-
- # html anchor id for the module in a nitdoc page
- # MOD_owner_name
- private fun anchor: String do
- if anchor_cache == null then
- var res = new Buffer
- res.append("MOD_")
- var mowner = public_owner
- if mowner != null then
- res.append("{public_owner.name}_")
- end
- res.append(self.name)
- anchor_cache = res.to_s
- end
- return anchor_cache.as(not null)
- end
- private var anchor_cache: nullable String
-
- # Return a link (html a tag) to the nitdoc module page
- # <a href="url" title="short_comment">html_name</a>
- private fun html_link(page: NitdocPage) do
- if html_link_cache == null then
- var res = new Buffer
- if page.ctx.mbuilder.mmodule2nmodule.has_key(self) then
- res.append("<a href='{url}' title='{page.ctx.mbuilder.mmodule2nmodule[self].short_comment}'>{html_name}</a>")
- else
- res.append("<a href='{url}'>{html_name}</a>")
- end
- html_link_cache = res.to_s
- end
- page.append(html_link_cache.as(not null))
- end
- private var html_link_cache: nullable String
-
- # Return the module signature decorated with html
- # <span>module html_full_namespace</span>
- private fun html_signature(page: NitdocPage) do
- page.append("<span>module ")
- html_full_namespace(page)
- page.append("</span>")
- end
-
- # Return the module full namespace decorated with html
- # <span>public_owner.html_namespace::html_link</span>
- private fun html_full_namespace(page: NitdocPage) do
- page.append("<span>")
- var mowner = public_owner
- if mowner != null then
- public_owner.html_namespace(page)
- page.append("::")
- end
- html_link(page)
- page.append("</span>")
- end
-
- # Return the module full namespace decorated with html
- # <span>public_owner.html_namespace</span>
- private fun html_namespace(page: NitdocPage) do
- page.append("<span>")
- var mowner = public_owner
- if mowner != null then
- public_owner.html_namespace(page)
- else
- html_link(page)
- end
- page.append("</span>")
- end
-
- # Return the full comment of the module decorated with html
- private fun html_comment(page: NitdocPage) do
- page.append("<div class='description'>")
- if page.ctx.mbuilder.mmodule2nmodule.has_key(self) then
- var nmodule = page.ctx.mbuilder.mmodule2nmodule[self]
- if page.ctx.github_gitdir != null then
- var loc = nmodule.doc_location.github(page.ctx.github_gitdir.as(not null))
- page.append("<textarea class='baseComment' data-comment-namespace='{full_name}' data-comment-location='{loc}'>{nmodule.full_comment}</textarea>")
- end
- if nmodule.full_comment == "" then
- page.append("<p class='info inheritance'>")
- page.append("<span class=\"noComment\">no comment for </span>")
- else
- page.append("<div class='comment'>{nmodule.full_markdown}</div>")
- page.append("<p class='info inheritance'>")
- end
- page.append("definition in ")
- self.html_full_namespace(page)
- page.append(" {page.show_source(nmodule.location)}</p>")
- end
- page.append("</div>")
- end
-
- private fun has_mclassdef_for(mclass: MClass): Bool do
- for mmodule in self.in_nesting.greaters do
- for mclassdef in mmodule.mclassdefs do
- if mclassdef.mclass == mclass then return true
- end
- end
- return false
- end
-
- private fun has_mclassdef(mclassdef: MClassDef): Bool do
- for mmodule in self.in_nesting.greaters do
- for oclassdef in mmodule.mclassdefs do
- if mclassdef == oclassdef then return true
- end
- end
- return false
- end
-end
-
-redef class MClass
- # Return the HTML escaped name of the module
- private fun html_name: String do return name.html_escape
-
- # URL to nitdoc page
- # class_owner_name.html
- private fun url: String do
- return "class_{public_owner}_{name}.html"
- end
-
- # html anchor id for the class in a nitdoc page
- # MOD_owner_name
- private fun anchor: String do
- if anchor_cache == null then
- anchor_cache = "CLASS_{public_owner.name}_{name}"
- end
- return anchor_cache.as(not null)
- end
- private var anchor_cache: nullable String
-
- # Return a link (with signature) to the nitdoc class page
- # <a href="url" title="short_comment">html_name(signature)</a>
- private fun html_link(page: NitdocPage) do
- if html_link_cache == null then
- var res = new Buffer
- res.append("<a href='{url}'")
- if page.ctx.mbuilder.mclassdef2nclassdef.has_key(intro) then
- var nclass = page.ctx.mbuilder.mclassdef2nclassdef[intro]
- if nclass isa AStdClassdef then
- res.append(" title=\"{nclass.short_comment}\"")
- end
- end
- res.append(">{html_name}{html_short_signature}</a>")
- html_link_cache = res.to_s
- end
- page.append(html_link_cache.as(not null))
- end
- private var html_link_cache: nullable String
-
- # Return a short link (without signature) to the nitdoc class page
- # <a href="url" title="short_comment">html_name</a>
- private fun html_short_link(page: NitdocPage) do
- if html_short_link_cache == null then
- var res = new Buffer
- res.append("<a href='{url}'")
- if page.ctx.mbuilder.mclassdef2nclassdef.has_key(intro) then
- var nclass = page.ctx.mbuilder.mclassdef2nclassdef[intro]
- if nclass isa AStdClassdef then
- res.append(" title=\"{nclass.short_comment}\"")
- end
- end
- res.append(">{html_name}</a>")
- html_short_link_cache = res.to_s
- end
- page.append(html_short_link_cache.as(not null))
- end
- private var html_short_link_cache: nullable String
-
- # Return a link (with signature) to the class anchor
- # <a href="url" title="short_comment">html_name</a>
- private fun html_link_anchor(page: NitdocPage) do
- if html_link_anchor_cache == null then
- var res = new Buffer
- res.append("<a href='#{anchor}'")
- if page.ctx.mbuilder.mclassdef2nclassdef.has_key(intro) then
- var nclass = page.ctx.mbuilder.mclassdef2nclassdef[intro]
- if nclass isa AStdClassdef then
- res.append(" title=\"{nclass.short_comment}\"")
- end
- end
- res.append(">{html_name}{html_short_signature}</a>")
- html_link_anchor_cache = res.to_s
- end
- page.append(html_link_anchor_cache.as(not null))
- end
- private var html_link_anchor_cache: nullable String
-
- # Return the generic signature of the class with bounds
- # [E: <a>MType</a>, F: <a>MType</a>]
- private fun html_signature(page: NitdocPage) do
- if arity > 0 then
- page.append("[")
- for i in [0..intro.parameter_names.length[ do
- page.append("{intro.parameter_names[i]}: ")
- intro.bound_mtype.arguments[i].html_link(page)
- if i < intro.parameter_names.length - 1 then page.append(", ")
- end
- page.append("]")
- end
- end
-
- # Return the generic signature of the class without bounds
- # [E, F]
- private fun html_short_signature: String do
- if arity > 0 then
- return "[{intro.parameter_names.join(", ")}]"
- else
- return ""
- end
- end
-
- # Return the class namespace decorated with html
- # <span>intro_module::html_short_link</span>
- private fun html_namespace(page: NitdocPage) do
- intro_mmodule.html_namespace(page)
- page.append("::<span>")
- html_short_link(page)
- page.append("</span>")
- end
-
- # Return a list item for the mclass
- # <li>html_link</li>
- private fun html_sidebar_item(page: NitdocModule) do
- if page.mmodule.in_nesting.greaters.has(intro.mmodule) then
- page.append("<li class='intro'>")
- page.append("<span title='Introduced'>I</span>")
- html_link_anchor(page)
- else if page.mmodule.has_mclassdef_for(self) then
- page.append("<li class='redef'>")
- page.append("<span title='Redefined'>R</span>")
- html_link_anchor(page)
- else
- page.append("<li class='inherit'>")
- page.append("<span title='Inherited'>H</span>")
- html_link(page)
- end
- page.append("</li>")
- end
-
- private fun html_full_desc(page: NitdocModule) do
- var is_redef = not page.mmodule.in_nesting.greaters.has(intro.mmodule)
- var redefs = mpropdefs_in_module(page)
- if not is_redef or not redefs.is_empty then
- var classes = new Array[String]
- classes.add(kind.to_s)
- if is_redef then classes.add("redef")
- classes.add(visibility.to_s)
- page.append("<article class='{classes.join(" ")}' id='{anchor}'>")
- page.append("<h3 class='signature' data-untyped-signature='{html_name}{html_short_signature}'>")
- page.append("<span>")
- html_short_link(page)
- html_signature(page)
- page.append("</span></h3>")
- html_info(page)
- html_comment(page)
- page.append("</article>")
- end
- end
-
- private fun html_info(page: NitdocModule) do
- page.append("<div class='info'>")
- if visibility < public_visibility then page.append("{visibility.to_s} ")
- if not page.mmodule.in_nesting.greaters.has(intro.mmodule) then page.append("redef ")
- page.append("{kind} ")
- html_namespace(page)
- page.append("{html_short_signature}</div>")
- end
-
- private fun html_comment(page: NitdocPage) do
- page.append("<div class='description'>")
- if page isa NitdocModule then
- page.mmodule.linearize_mclassdefs(mclassdefs)
- # comments for each mclassdef contained in current mmodule
- for mclassdef in mclassdefs do
- if not mclassdef.is_intro and not page.mmodule.mclassdefs.has(mclassdef) then continue
- if page.ctx.mbuilder.mclassdef2nclassdef.has_key(mclassdef) then
- var nclass = page.ctx.mbuilder.mclassdef2nclassdef[mclassdef]
- if nclass isa AStdClassdef then
- if page.ctx.github_gitdir != null then
- var loc = nclass.doc_location.github(page.ctx.github_gitdir.as(not null))
- page.append("<textarea class='baseComment' data-comment-namespace='{mclassdef.mmodule.full_name}::{name}' data-comment-location='{loc}'>{nclass.full_comment}</textarea>")
- end
- if nclass.full_comment == "" then
- page.append("<p class='info inheritance'>")
- page.append("<span class=\"noComment\">no comment for </span>")
- else
- page.append("<div class='comment'>{nclass.full_markdown}</div>")
- page.append("<p class='info inheritance'>")
- end
- if mclassdef.is_intro then
- page.append("introduction in ")
- else
- page.append("refinement in ")
- end
- mclassdef.mmodule.html_full_namespace(page)
- page.append(" {page.show_source(nclass.location)}</p>")
- end
- end
- end
- else
- # comments for intro
- if page.ctx.mbuilder.mclassdef2nclassdef.has_key(intro) then
- var nclass = page.ctx.mbuilder.mclassdef2nclassdef[intro]
- if nclass isa AStdClassdef then
- if page.ctx.github_gitdir != null then
- var loc = nclass.doc_location.github(page.ctx.github_gitdir.as(not null))
- page.append("<textarea class='baseComment' data-comment-namespace='{intro.mmodule.full_name}::{name}' data-comment-location='{loc}'>{nclass.full_comment}</textarea>")
- end
- if nclass.full_comment == "" then
- page.append("<p class='info inheritance'>")
- page.append("<span class=\"noComment\">no comment for </span>")
- else
- page.append("<div class='comment'>{nclass.full_markdown}</div>")
- page.append("<p class='info inheritance'>")
- end
- page.append("introduction in ")
- intro.mmodule.html_full_namespace(page)
- page.append(" {page.show_source(nclass.location)}</p>")
- end
- end
- end
- page.append("</div>")
- end
-
- private fun mpropdefs_in_module(page: NitdocModule): Array[MPropDef] do
- var res = new Array[MPropDef]
- page.mmodule.linearize_mclassdefs(mclassdefs)
- for mclassdef in mclassdefs do
- if not page.mmodule.mclassdefs.has(mclassdef) then continue
- if mclassdef.is_intro then continue
- for mpropdef in mclassdef.mpropdefs do
- if mpropdef.mproperty.visibility < page.ctx.min_visibility then continue
- if mpropdef isa MAttributeDef then continue
- res.add(mpropdef)
- end
- end
- return res
- end
-end
-
-redef class MProperty
- # Escape name for html output
- private fun html_name: String do return name.html_escape
-
- # Return the property namespace decorated with html
- # <span>intro_module::intro_class::html_link</span>
- private fun html_namespace(page: NitdocPage) do
- intro_mclassdef.mclass.html_namespace(page)
- page.append(intro_mclassdef.mclass.html_short_signature)
- page.append("::<span>")
- intro.html_link(page)
- page.append("</span>")
- end
-end
-
-redef class MType
- # Link to the type definition in the nitdoc page
- private fun html_link(page: NitdocPage) is abstract
-end
-
-redef class MClassType
- redef fun html_link(page) do mclass.html_link(page)
-end
-
-redef class MNullableType
- redef fun html_link(page) do
- page.append("nullable ")
- mtype.html_link(page)
- end
-end
-
-redef class MGenericType
- redef fun html_link(page) do
- page.append("<a href='{mclass.url}'>{mclass.html_name}</a>[")
- for i in [0..arguments.length[ do
- arguments[i].html_link(page)
- if i < arguments.length - 1 then page.append(", ")
- end
- page.append("]")
- end
-end
-
-redef class MParameterType
- redef fun html_link(page) do
- var name = mclass.intro.parameter_names[rank]
- page.append("<a href='{mclass.url}#FT_{name}' title='formal type'>{name}</a>")
- end
-end
-
-redef class MVirtualType
- redef fun html_link(page) do mproperty.intro.html_link(page)
-end
-
-redef class MClassDef
- # Return the classdef namespace decorated with html
- private fun html_namespace(page: NitdocPage) do
- mmodule.html_full_namespace(page)
- page.append("::<span>")
- mclass.html_link(page)
- page.append("</span>")
- end
-end
-
-redef class MPropDef
- # Return the full qualified name of the mpropdef
- # module::classdef::name
- private fun full_name: String do
- return "{mclassdef.mclass.public_owner.name}::{mclassdef.mclass.name}::{mproperty.name}"
- end
-
- # URL into the nitdoc page
- # class_owner_name.html#anchor
- private fun url: String do
- if url_cache == null then
- url_cache = "{mclassdef.mclass.url}#{anchor}"
- end
- return url_cache.as(not null)
- end
- private var url_cache: nullable String
-
- # html anchor id for the property in a nitdoc class page
- # PROP_mclass_propertyname
- private fun anchor: String do
- if anchor_cache == null then
- anchor_cache = "PROP_{mclassdef.mclass.public_owner.name}_{mproperty.name.replace(" ", "_")}"
- end
- return anchor_cache.as(not null)
- end
- private var anchor_cache: nullable String
-
- # Return a link to property into the nitdoc class page
- # <a href="url" title="short_comment">html_name</a>
- private fun html_link(page: NitdocPage) do
- if html_link_cache == null then
- var res = new Buffer
- if page.ctx.mbuilder.mpropdef2npropdef.has_key(self) then
- var nprop = page.ctx.mbuilder.mpropdef2npropdef[self]
- res.append("<a href=\"{url}\" title=\"{nprop.short_comment}\">{mproperty.html_name}</a>")
- else
- res.append("<a href=\"{url}\">{mproperty.html_name}</a>")
- end
- html_link_cache = res.to_s
- end
- page.append(html_link_cache.as(not null))
- end
- private var html_link_cache: nullable String
-
- # Return a list item for the mpropdef
- # <li>html_link</li>
- private fun html_sidebar_item(page: NitdocClass) do
- if is_intro and mclassdef.mclass == page.mclass then
- page.append("<li class='intro'>")
- page.append("<span title='Introduced'>I</span>")
- else if is_intro and mclassdef.mclass != page.mclass then
- page.append("<li class='inherit'>")
- page.append("<span title='Inherited'>H</span>")
- else
- page.append("<li class='redef'>")
- page.append("<span title='Redefined'>R</span>")
- end
- html_link(page)
- page.append("</li>")
- end
-
- private fun html_full_desc(page: NitdocPage, ctx: MClass) is abstract
- private fun html_info(page: NitdocPage, ctx: MClass) is abstract
-
- private fun html_comment(page: NitdocPage) do
- page.append("<div class='description'>")
- if not is_intro then
- if page.ctx.mbuilder.mpropdef2npropdef.has_key(mproperty.intro) then
- var intro_nprop = page.ctx.mbuilder.mpropdef2npropdef[mproperty.intro]
- if page.ctx.github_gitdir != null then
- var loc = intro_nprop.doc_location.github(page.ctx.github_gitdir.as(not null))
- page.append("<textarea class='baseComment' data-comment-namespace='{mproperty.intro.mclassdef.mmodule.full_name}::{mproperty.intro.mclassdef.mclass.name}::{mproperty.name}' data-comment-location='{loc}'>{intro_nprop.full_comment}</textarea>")
- end
- if intro_nprop.full_comment.is_empty then
- page.append("<p class='info inheritance'>")
- page.append("<span class=\"noComment\">no comment for </span>")
- else
- page.append("<div class='comment'>{intro_nprop.full_markdown}</div>")
- page.append("<p class='info inheritance'>")
- end
- page.append("introduction in ")
- mproperty.intro.mclassdef.html_namespace(page)
- page.append(" {page.show_source(intro_nprop.location)}</p>")
- end
- end
- if page.ctx.mbuilder.mpropdef2npropdef.has_key(self) then
- var nprop = page.ctx.mbuilder.mpropdef2npropdef[self]
- if page.ctx.github_gitdir != null then
- var loc = nprop.doc_location.github(page.ctx.github_gitdir.as(not null))
- page.append("<textarea class='baseComment' data-comment-namespace='{mclassdef.mmodule.full_name}::{mclassdef.mclass.name}::{mproperty.name}' data-comment-location='{loc}'>{nprop.full_comment}</textarea>")
- end
- if nprop.full_comment == "" then
- page.append("<p class='info inheritance'>")
- page.append("<span class=\"noComment\">no comment for </span>")
- else
- page.append("<div class='comment'>{nprop.full_markdown}</div>")
- page.append("<p class='info inheritance'>")
- end
- if is_intro then
- page.append("introduction in ")
- else
- page.append("redefinition in ")
- end
- mclassdef.html_namespace(page)
- page.append(" {page.show_source(nprop.location)}</p>")
- end
- page.append("</div>")
- end
-end
-
-redef class MMethodDef
- redef fun html_full_desc(page, ctx) do
- var classes = new Array[String]
- var is_redef = mproperty.intro_mclassdef.mclass != ctx
- if mproperty.is_init then
- classes.add("init")
- else
- classes.add("fun")
- end
- if is_redef then classes.add("redef")
- classes.add(mproperty.visibility.to_s)
- page.append("<article class='{classes.join(" ")}' id='{anchor}'>")
- if page.ctx.mbuilder.mpropdef2npropdef.has_key(self) then
- page.append("<h3 class='signature' data-untyped-signature='{mproperty.name}{msignature.untyped_signature(page)}'>")
- page.append("<span>{mproperty.html_name}")
- msignature.html_signature(page)
- page.append("</span></h3>")
- else
- page.append("<h3 class='signature' data-untyped-signature='init{msignature.untyped_signature(page)}'>")
- page.append("<span>init")
- msignature.html_signature(page)
- page.append("</span></h3>")
- end
- html_info(page, ctx)
- html_comment(page)
- page.append("</article>")
- end
-
- redef fun html_info(page, ctx) do
- page.append("<div class='info'>")
- if mproperty.visibility < public_visibility then page.append("{mproperty.visibility.to_s} ")
- if mproperty.intro_mclassdef.mclass != ctx then page.append("redef ")
- if mproperty.is_init then
- page.append("init ")
- else
- page.append("fun ")
- end
- mproperty.html_namespace(page)
- page.append("</div>")
- end
-end
-
-redef class MVirtualTypeDef
- redef fun html_full_desc(page, ctx) do
- var is_redef = mproperty.intro_mclassdef.mclass != ctx
- var classes = new Array[String]
- classes.add("type")
- if is_redef then classes.add("redef")
- classes.add(mproperty.visibility.to_s)
- page.append("<article class='{classes.join(" ")}' id='{anchor}'>")
- page.append("<h3 class='signature' data-untyped-signature='{mproperty.name}'><span>{mproperty.html_name}: ")
- bound.html_link(page)
- page.append("</span></h3>")
- html_info(page, ctx)
- html_comment(page)
- page.append("</article>")
- end
-
- redef fun html_info(page, ctx) do
- page.append("<div class='info'>")
- if mproperty.intro_mclassdef.mclass != ctx then page.append("redef ")
- page.append("type ")
- mproperty.html_namespace(page)
- page.append("</div>")
- end
-end
-
-redef class MSignature
- private fun html_signature(page: NitdocPage) do
- if not mparameters.is_empty then
- page.append("(")
- for i in [0..mparameters.length[ do
- mparameters[i].html_link(page)
- if i < mparameters.length - 1 then page.append(", ")
- end
- page.append(")")
- end
- if return_mtype != null then
- page.append(": ")
- return_mtype.html_link(page)
- end
- end
-
- private fun untyped_signature(page: NitdocPage): String do
- var res = new Buffer
- if not mparameters.is_empty then
- res.append("(")
- for i in [0..mparameters.length[ do
- res.append(mparameters[i].name)
- if i < mparameters.length - 1 then res.append(", ")
- end
- res.append(")")
- end
- return res.to_s
- end
-end
-
-redef class MParameter
- private fun html_link(page: NitdocPage) do
- page.append("{name}: ")
- mtype.html_link(page)
- if is_vararg then page.append("...")
- end
-end
-
-#
-# Nodes redefs
-#
-
-redef class Location
- fun github(gitdir: String): String do
- var base_dir = getcwd.join_path(gitdir).simplify_path
- var file_loc = getcwd.join_path(file.filename).simplify_path
- var gith_loc = file_loc.substring(base_dir.length + 1, file_loc.length)
- return "{gith_loc}:{line_start},{column_start}--{line_end},{column_end}"
- end
-end
-
-redef class ADoc
- private fun short_comment: String do
- return n_comment.first.text.substring_from(2).replace("\n", "").html_escape
- end
-
- private fun full_comment: String do
- var res = new Buffer
- for t in n_comment do
- var text = t.text
- text = text.substring_from(1)
- if text.first == ' ' then text = text.substring_from(1)
- res.append(text.html_escape)
+ redef fun process_mainmodule(mainmodule, mmodules)
+ do
+ var modelbuilder = toolcontext.modelbuilder
+ var model = modelbuilder.model
+
+ 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 catalog = new Catalog(toolcontext.modelbuilder)
+ catalog.build_catalog(mainmodule.model.mpackages)
+
+ var filter = new ModelFilter(
+ min_visibility,
+ accept_attribute = accept_attribute,
+ accept_fictive = true,
+ accept_generated = true,
+ accept_test = false,
+ accept_redef = true,
+ accept_extern = true,
+ accept_empty_doc = true,
+ accept_example = true,
+ accept_broken = false)
+
+ var doc = new DocModel(model, mainmodule, modelbuilder, catalog, filter)
+
+ model.nitdoc_md_processor = doc.md_processor
+ doc.no_dot = toolcontext.opt_nodot.value
+ doc.no_code = toolcontext.opt_nocode.value
+ doc.code_url = toolcontext.opt_source.value
+ doc.share_url = toolcontext.opt_shareurl.value
+ doc.custom_brand = toolcontext.opt_custom_brand.value
+ doc.custom_title = toolcontext.opt_custom_title.value
+ doc.custom_footer = toolcontext.opt_custom_footer.value
+ doc.custom_intro = toolcontext.opt_custom_intro.value
+ doc.tracker_url = toolcontext.opt_piwik_tracker.value
+ doc.piwik_site_id = toolcontext.opt_piwik_site_id.value
+
+ # Prepare output dir
+ var test_mode = toolcontext.opt_test.value
+ var no_render = toolcontext.opt_norender.value
+ var output_dir = toolcontext.opt_dir.value or else "doc"
+
+ if not no_render then
+ output_dir.mkdir
+
+ # Copy assets
+ var share_dir = toolcontext.opt_share_dir.value or else "{toolcontext.share_dir}/nitdoc"
+ sys.system("cp -r -- {share_dir.escape_to_sh}/* {output_dir.escape_to_sh}/")
+ end
+
+ # Collect model to document
+ var mpackages = model.collect_mpackages(filter)
+ var mgroups = model.collect_mgroups(filter)
+ var nmodules = model.collect_mmodules(filter)
+ var mclasses = model.collect_mclasses(filter)
+ var mprops = model.collect_mproperties(filter)
+
+ var mentities = new Array[MEntity]
+ mentities.add_all mpackages
+ mentities.add_all mgroups
+ mentities.add_all nmodules
+ mentities.add_all mclasses
+ mentities.add_all mprops
+
+ var persons = doc.catalog.persons
+ var tags = doc.catalog.tag2proj.keys
+
+ # Prepare progress bar
+ var count = 0
+ var pages = 1 # count homepage
+ pages += mentities.length
+ pages += persons.length
+ pages += tags.length
+
+ print "Generating documentation pages..."
+ var progress = new TermProgress(pages, 0)
+ if not test_mode then progress.display
+
+ # Make pages
+ count += 1
+ if not test_mode then progress.update(count, "homepage")
+ if not no_render then doc.gen_page(new PageHome("Overview"), output_dir)
+
+ for mentity in mentities do
+ count += 1
+ if not test_mode then progress.update(count, "page {count}/{pages}")
+ if not no_render then doc.gen_page(new PageMEntity(mentity), output_dir)
+ end
+ for name, person in persons do
+ count += 1
+ if not test_mode then progress.update(count, "page {count}/{pages}")
+ if not no_render then doc.gen_page(new PagePerson(person), output_dir)
+ end
+ for tag in tags do
+ count += 1
+ if not test_mode then progress.update(count, "page {count}/{pages}")
+ if not no_render then doc.gen_page(new PageTag(tag), output_dir)
+ end
+
+ if not test_mode then print "" # finalise progress
+ if not no_render then
+ doc.create_index_file("{output_dir}/quicksearch-list.js")
+ print "Documentation produced in `{output_dir}`"
+ end
+
+ if test_mode then
+ print "Generated {count}/{pages} pages"
+ print " PageHome: 1"
+ print " PageMPackage: {mpackages.length}"
+ print " PageMGroup: {mgroups.length}"
+ print " PageMModule: {nmodules.length}"
+ print " PageMClass: {mclasses.length}"
+ print " PageMProperty: {mprops.length}"
+ print " PagePerson: {persons.length}"
+ print " PageTag: {tags.length}"