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 # Generates lists about intros/redefs in MEntity.
17 # Actually, this works only for MModules and MclassDefs.
18 module doc_intros_redefs
22 # Computes intro / redef mentity list for each DefinitionArticle.
23 class IntroRedefListPhase
27 for page
in doc
.pages
.values
do
28 if not page
isa MEntityPage then continue
29 page
.root
.build_intro_redef_list
(self, doc
, page
)
34 redef class DocComposite
36 # Computes intro / redef lists for this page.
38 # See `IntroRedefListPhase`.
39 fun build_intro_redef_list
(v
: IntroRedefListPhase, doc
: DocModel, page
: MEntityPage) do
40 for child
in children
do child
.build_intro_redef_list
(v
, doc
, page
)
44 redef class DefinitionArticle
45 redef fun build_intro_redef_list
(v
, doc
, page
) do
46 var mentity
= self.mentity
47 if mentity
isa MModule then
48 build_mmodule_list
(v
, doc
, mentity
)
49 else if mentity
isa MClassDef and mentity
.mmodule
== page
.mentity
then
50 build_mclassdef_list
(v
, doc
, mentity
)
55 # TODO this should move to MEntity?
56 private fun build_mmodule_list
(v
: IntroRedefListPhase, doc
: DocModel, mmodule
: MModule) do
57 var section
= new TabbedGroup("{mentity.nitdoc_id}.intros_redefs")
58 section
.toc_title
= "Intros / Redefs"
59 var group
= new PanelGroup("list.group", "List")
60 var intros
= mmodule
.intro_mclassdefs
(v
.ctx
.min_visibility
).to_a
61 doc
.mainmodule
.linearize_mclassdefs
(intros
)
62 group
.add_child
new MEntitiesListArticle("{mentity.nitdoc_id}.intros", "Introduces", intros
)
63 var redefs
= mmodule
.redef_mclassdefs
(v
.ctx
.min_visibility
).to_a
64 doc
.mainmodule
.linearize_mclassdefs
(redefs
)
65 group
.add_child
new MEntitiesListArticle("{mentity.nitdoc_id}.redefs", "Redefines", redefs
)
66 section
.add_child group
70 # TODO this should move to MEntity?
71 private fun build_mclassdef_list
(v
: IntroRedefListPhase, doc
: DocModel, mclassdef
: MClassDef) do
72 var section
= new TabbedGroup("{mentity.nitdoc_id}.intros_redefs")
73 section
.toc_title
= "Intros / Redefs"
74 var group
= new PanelGroup("list.group", "List")
75 var intros
= mclassdef
.collect_intro_mpropdefs
(v
.ctx
.min_visibility
).to_a
76 # FIXME avoid diff changes
77 # v.ctx.mainmodule.linearize_mpropdefs(intros)
78 group
.add_child
new MEntitiesListArticle("{mentity.nitdoc_id}.intros", "Introduces", intros
)
79 var redefs
= mclassdef
.collect_redef_mpropdefs
(v
.ctx
.min_visibility
).to_a
80 # FIXME avoid diff changes
81 # v.ctx.mainmodule.linearize_mpropdefs(redefs)
82 group
.add_child
new MEntitiesListArticle("{mentity.nitdoc_id}.redefs", "Redefines", redefs
)
83 section
.add_child group