tests: add base_with.nit
[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 root.children.insert(section, 1)
51 end
52 end
53
54 redef class MClassPage
55 redef fun build_inh_list(v, doc) do
56 var section = new InheritanceListSection(mentity)
57 var parents = self.parents.to_a
58 v.name_sorter.sort(parents)
59 section.add_child new HierarchyListArticle(mentity, "Parents", parents)
60 var ancestors = self.ancestors.to_a
61 v.name_sorter.sort(ancestors)
62 section.add_child new HierarchyListArticle(mentity, "Ancestors", ancestors)
63 var children = self.children.to_a
64 v.name_sorter.sort(children)
65 section.add_child new HierarchyListArticle(mentity, "Children", children)
66 var descendants = self.descendants.to_a
67 v.name_sorter.sort(descendants)
68 section.add_child new HierarchyListArticle(mentity, "Descendants", descendants)
69 root.children.insert(section, 1)
70 end
71 end
72
73 # FIXME diff hack
74 class ImportationListSection
75 super DocSection
76 super MEntityComposite
77 end
78
79 # FIXME diff hack
80 class InheritanceListSection
81 super DocSection
82 super MEntityComposite
83 end
84
85 # Dislay a hierarchical list of mentities.
86 class HierarchyListArticle
87 super MEntityArticle
88
89 # Title displayed in the top of this list.
90 var list_title: String
91
92 # MEntities to display in this list.
93 var mentities: Array[MEntity]
94 end