benchmarks: Reunited common functions for benches in a new shell file.
[nit.git] / src / test_markdown.nit
index dcf3cc9..76a5180 100644 (file)
@@ -21,54 +21,46 @@ import markdown
 redef class ModelBuilder
        fun test_markdown(page: HTMLTag, mmodule: MModule)
        do
-               page.add_raw_html "<a id='{mmodule.full_name}'></a>"
-               page.add_raw_html "<h1>module {mmodule}</h1>"
-               if mmodule2nmodule.has_key(mmodule) then
-                       var nmodule = mmodule2nmodule[mmodule]
-                       do
-                               var nmoduledecl = nmodule.n_moduledecl
-                               if nmoduledecl == null then break label x
-                               var ndoc = nmoduledecl.n_doc
-                               if ndoc == null then break label x
-                               page.add ndoc.full_markdown
-                       end label x
-                       for nclassdef in nmodule.n_classdefs do
-                               var mclassdef = nclassdef.mclassdef.as(not null)
-                               if nclassdef isa AStdClassdef then
-                                       var ndoc = nclassdef.n_doc
-                                       if ndoc != null then
-                                               if mclassdef.mclass.intro == mclassdef then page.add_raw_html "<a id='{mclassdef.mclass.full_name}'></a>"
-                                               page.add_raw_html "<h2>class {mclassdef}</h2>"
-                                               page.add ndoc.full_markdown
-                                       end
-                               end
-                               for npropdef in nclassdef.n_propdefs do
-                                       var mpropdef = npropdef.mpropdef.as(not null)
-                                       var ndoc = npropdef.n_doc
-                                       if ndoc != null then
-                                               if mpropdef.mproperty.intro == mpropdef then page.add_raw_html "<a id='{mpropdef.mproperty.full_name}'></a>"
-
-                                               page.add_raw_html "<h3>prop {mpropdef}</h3>"
-                                               page.add ndoc.full_markdown
-                                       end
+               page.add_raw_html "<h3 id='{mmodule}'>module {mmodule}</h1>"
+               var mdoc = mmodule.mdoc
+               if mdoc != null then
+                       page.add mdoc.full_markdown
+               end
+               for mclassdef in mmodule.mclassdefs do
+                       mdoc = mclassdef.mdoc
+                       if mdoc != null then
+                               page.add_raw_html "<h4 id='{mclassdef}'>class {mclassdef}</h2>"
+                               page.add mdoc.full_markdown
+                       end
+                       for mpropdef in mclassdef.mpropdefs do
+                               mdoc = mpropdef.mdoc
+                               if mdoc != null then
+                                       page.add_raw_html "<h5 id='{mpropdef}'>prop {mpropdef}</h3>"
+                                       page.add mdoc.full_markdown
                                end
                        end
                end
        end
 end
 
+redef class MModule
+       redef fun href do return "#{to_s}"
+end
+redef class MClassDef
+       redef fun href do return "#{to_s}"
+end
+redef class MPropDef
+       redef fun href do return "#{to_s}"
+end
+
 var toolcontext = new ToolContext
 
 var opt_full = new OptionBool("Process also imported modules", "--full")
 toolcontext.option_context.add_option(opt_full)
+toolcontext.tooldescription = "Usage: test_markdown [OPTION]... <file.nit>...\nGenerates HTML of comments of documentation from Nit source files."
 
-toolcontext.process_options
+toolcontext.process_options(args)
 var args = toolcontext.option_context.rest
-if args.is_empty then
-       print "usage: test_markdown [options] file.nit..."
-       toolcontext.option_context.usage
-       return
-end
 
 var model = new Model
 var modelbuilder = new ModelBuilder(model, toolcontext)
@@ -76,10 +68,15 @@ var modelbuilder = new ModelBuilder(model, toolcontext)
 var mmodules = modelbuilder.parse(args)
 modelbuilder.run_phases
 
+var hv = new HighlightVisitor
+
 var page = new HTMLTag("html")
 page.add_raw_html """
 <head>
 <meta charset="utf-8">
+"""
+page.add_raw_html hv.head_content
+page.add_raw_html """
 <style type="text/css">
 code {margin: 0 2px;
 padding: 0px 5px;
@@ -95,13 +92,31 @@ overflow: auto;
 padding: 6px 6px;
 border-radius: 3px;
 }
+.rawcode[title] {
+border-color: red;
+}
+h5 {font-weight:bold;}
+{{{hv.css_content}}}
 </style>
-</head><body>
-"""
+</head><body>"""
 
 if opt_full.value then
-       for m in model.mmodules do
-               modelbuilder.test_markdown(page, m)
+       for p in model.mprojects do
+               page.add_raw_html "<h1 id='P{p.name}'>project {p.name}</h2>"
+               var mdoc = p.mdoc
+               if mdoc != null then
+                       page.add mdoc.full_markdown
+               end
+               for g in p.mgroups do
+                       mdoc = g.mdoc
+                       if mdoc != null then
+                               page.add_raw_html "<h2 id='G{g.full_name}'>group {g.full_name}</h2>"
+                               page.add mdoc.full_markdown
+                       end
+                       for m in g.mmodules do
+                               modelbuilder.test_markdown(page, m)
+                       end
+               end
        end
 else
        for m in mmodules do
@@ -109,5 +124,6 @@ else
        end
 end
 
+page.add_raw_html hv.foot_content
 page.add_raw_html "</body>"
-print page.html
+page.write_to(stdout)