1 # This file is part of NIT ( http://www.nitlanguage.org ).
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
7 # http://www.apache.org/licenses/LICENSE-2.0
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.
15 # Computes importation and class hierarchy lists.
16 module doc_hierarchies
21 # Insert inheritance / importation lists in the page.
22 class InheritanceListsPhase
25 # Used to sort list by name.
26 var name_sorter
= new MEntityNameSorter
29 for page
in doc
.pages
do
30 if page
isa MEntityPage then page
.build_inh_list
(self, doc
)
35 redef class MEntityPage
37 # Build importation / inheritance list for this page.
38 fun build_inh_list
(v
: InheritanceListsPhase, doc
: DocModel) do end
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)
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)
76 class ImportationListSection
78 super MEntityComposite
82 class InheritanceListSection
84 super MEntityComposite
87 # Dislay a hierarchical list of mentities.
88 class HierarchyListArticle
91 # Title displayed in the top of this list.
92 var list_title
: String
94 # MEntities to display in this list.
95 var mentities
: Array[MEntity]