Merge: new `with` statement
[nit.git] / src / doc / doc_phases / doc_hierarchies.nit
1 # This file is part of NIT ( http://www.nitlanguage.org ).
2 #
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
6 #
7 # http://www.apache.org/licenses/LICENSE-2.0
8 #
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
14
15 # Computes importation and class hierarchy lists.
16 module doc_hierarchies
17
18 import doc_structure
19 import doc_poset
20
21 # Insert inheritance / importation lists in the page.
22 class InheritanceListsPhase
23 super DocPhase
24
25 # Used to sort list by name.
26 var name_sorter = new MEntityNameSorter
27
28 redef fun apply do
29 for page in doc.pages do
30 if page isa MEntityPage then page.build_inh_list(self, doc)
31 end
32 end
33 end
34
35 redef class MEntityPage
36
37 # Build importation / inheritance list for this page.
38 fun build_inh_list(v: InheritanceListsPhase, doc: DocModel) do end
39 end
40
41 redef class MModulePage
42 redef fun build_inh_list(v, doc) do
43 var section = new ImportationListSection(mentity)
44 var imports = self.imports.to_a
45 v.name_sorter.sort(imports)
46 section.add_child new HierarchyListArticle(mentity, "Imports", imports)
47 var clients = self.clients.to_a
48 v.name_sorter.sort(clients)
49 section.add_child new HierarchyListArticle(mentity, "Clients", clients)
50 section.parent = root.children.first
51 root.children.first.children.insert(section, 1)
52 end
53 end
54
55 redef class MClassPage
56 redef fun build_inh_list(v, doc) do
57 var section = new InheritanceListSection(mentity)
58 var parents = self.parents.to_a
59 v.name_sorter.sort(parents)
60 section.add_child new HierarchyListArticle(mentity, "Parents", parents)
61 var ancestors = self.ancestors.to_a
62 v.name_sorter.sort(ancestors)
63 section.add_child new HierarchyListArticle(mentity, "Ancestors", ancestors)
64 var children = self.children.to_a
65 v.name_sorter.sort(children)
66 section.add_child new HierarchyListArticle(mentity, "Children", children)
67 var descendants = self.descendants.to_a
68 v.name_sorter.sort(descendants)
69 section.add_child new HierarchyListArticle(mentity, "Descendants", descendants)
70 section.parent = root.children.first
71 root.children.first.children.insert(section, 1)
72 end
73 end
74
75 # FIXME diff hack
76 class ImportationListSection
77 super DocSection
78 super MEntityComposite
79 end
80
81 # FIXME diff hack
82 class InheritanceListSection
83 super DocSection
84 super MEntityComposite
85 end
86
87 # Dislay a hierarchical list of mentities.
88 class HierarchyListArticle
89 super MEntityArticle
90
91 # Title displayed in the top of this list.
92 var list_title: String
93
94 # MEntities to display in this list.
95 var mentities: Array[MEntity]
96 end