Property definitions

nitc $ Nitdoc :: defaultinit
# Nitdoc phase explores the model and generate pages for each mentity found
private class Nitdoc
	super Phase

	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}"
		end
	end
end
src/nitdoc.nit:102,1--225,3