nitcatalog: use MConcen to generalize MGroup and MModule
[nit.git] / src / nitcatalog.nit
index 28ae918..21847ee 100644 (file)
@@ -245,7 +245,7 @@ class Catalog
        end
 
        # Recursively generate a level in the file tree of the *content* section
-       private fun gen_content_level(ot: OrderedTree[Object], os: Array[Object], res: Template)
+       private fun gen_content_level(ot: OrderedTree[MConcern], os: Array[Object], res: Template)
        do
                res.add "<ul>\n"
                for o in os do
@@ -255,13 +255,10 @@ class Catalog
                                var mdoc = o.mdoc
                                if mdoc != null then d = ": {mdoc.html_synopsis.write_to_string}"
                                res.add "<strong>{o.name}</strong>{d} ({o.filepath.to_s})"
-                       else if o isa ModulePath then
+                       else if o isa MModule then
                                var d = ""
-                               var m = o.mmodule
-                               if m != null then
-                                       var mdoc = m.mdoc
-                                       if mdoc != null then d = ": {mdoc.html_synopsis.write_to_string}"
-                               end
+                               var mdoc = o.mdoc
+                               if mdoc != null then d = ": {mdoc.html_synopsis.write_to_string}"
                                res.add "<strong>{o.name}</strong>{d} ({o.filepath.to_s})"
                        else
                                abort
@@ -293,14 +290,14 @@ class Catalog
                end
 
                res.add "<h2>Content</h2>"
-               var ot = new OrderedTree[Object]
+               var ot = new OrderedTree[MConcern]
                for g in mpackage.mgroups do
                        var pa = g.parent
                        if g.is_interesting then
                                ot.add(pa, g)
                                pa = g
                        end
-                       for mp in g.module_paths do
+                       for mp in g.mmodules do
                                ot.add(pa, mp)
                        end
                end
@@ -313,6 +310,21 @@ class Catalog
 <div class="sidebar">
 <ul class="box">
 """
+               var tryit = mpackage.metadata("upstream.tryit")
+               if tryit != null then
+                       score += 1.0
+                       var e = tryit.html_escape
+                       res.add "<li><a href=\"{e}\">Try<span style=\"color:white\">n</span>it!</a></li>\n"
+               end
+               var apk = mpackage.metadata("upstream.apk")
+               if apk != null then
+                       score += 1.0
+                       var e = apk.html_escape
+                       res.add "<li><a href=\"{e}\">Android apk</a></li>\n"
+               end
+
+               res.add """</ul>\n<ul class="box">\n"""
+
                var homepage = mpackage.metadata("upstream.homepage")
                if homepage != null then
                        score += 5.0
@@ -365,28 +377,27 @@ class Catalog
 
                res.add "<h3>Tags</h3>\n"
                var tags = mpackage.metadata("package.tags")
-               var ts2 = new Array[String]
-               var cat = null
+               var ts = new Array[String]
                if tags != null then
-                       var ts = tags.split(",")
-                       for t in ts do
+                       for t in tags.split(",") do
                                t = t.trim
                                if t == "" then continue
-                               if cat == null then cat = t
-                               tag2proj[t].add mpackage
-                               t = t.html_escape
-                               ts2.add "<a href=\"../index.html#tag_{t}\">{t}</a>"
+                               ts.add t
                        end
-                       res.add_list(ts2, ", ", ", ")
                end
-               if ts2.is_empty then
-                       var t = "none"
-                       cat = t
+               if ts.is_empty then ts.add "none"
+               if tryit != null then ts.add "tryit"
+               if apk != null then ts.add "apk"
+               var ts2 = new Array[String]
+               for t in ts do
                        tag2proj[t].add mpackage
-                       res.add "<a href=\"../index.html#tag_{t}\">{t}</a>"
+                       t = t.html_escape
+                       ts2.add "<a href=\"../index.html#tag_{t}\">{t}</a>"
                end
-               if cat != null then cat2proj[cat].add mpackage
-               score += ts2.length.score
+               res.add_list(ts2, ", ", ", ")
+               var cat = ts.first
+               cat2proj[cat].add mpackage
+               score += ts.length.score
 
                if deps.has(mpackage) then
                        var reqs = deps[mpackage].greaters.to_a
@@ -450,7 +461,7 @@ class Catalog
                var mmethods = 0
                var loc = 0
                for g in mpackage.mgroups do
-                       mmodules += g.module_paths.length
+                       mmodules += g.mmodules.length
                        for m in g.mmodules do
                                var am = modelbuilder.mmodule2node(m)
                                if am != null then
@@ -671,9 +682,11 @@ var modelbuilder = new ModelBuilder(model, tc)
 var catalog = new Catalog(modelbuilder)
 
 # Get files or groups
-for a in tc.option_context.rest do
-       modelbuilder.get_mgroup(a)
-       modelbuilder.identify_file(a)
+var args = tc.option_context.rest
+if opt_no_parse.value then
+       modelbuilder.scan_full(args)
+else
+       modelbuilder.parse_full(args)
 end
 
 # Scan packages and compute information
@@ -684,7 +697,6 @@ for p in model.mpackages do
 
        # Load the module to process importation information
        if opt_no_parse.value then continue
-       modelbuilder.parse_group(g)
 
        catalog.deps.add_node(p)
        for gg in p.mgroups do for m in gg.mmodules do