highlight: "display: block" and "line" only make sense in <pre> tags
[nit.git] / src / nitlight.nit
index ce3bf51..9112916 100644 (file)
@@ -20,23 +20,20 @@ import highlight
 var toolcontext = new ToolContext
 
 var opt_fragment = new OptionBool("Omit document header and footer", "-f", "--fragment")
+var opt_first_line = new OptionInt("Start the source file at this line (default: 1)", 0, "--first-line")
+var opt_last_line = new OptionInt("End the source file at this line (default: to the end)", 0, "--last-line")
 var opt_dir = new OptionString("Output html files in a specific directory (required if more than one module)", "-d", "--dir")
 var opt_full = new OptionBool("Process also imported modules", "--full")
 var opt_ast = new OptionBool("Generate specific HTML elements for each Node of the AST", "--ast")
-toolcontext.option_context.add_option(opt_fragment, opt_dir, opt_full)
+toolcontext.option_context.add_option(opt_fragment, opt_first_line, opt_last_line, opt_dir, opt_full)
+toolcontext.tooldescription = "Usage: nitlight [OPTION]... <file.nit>...\nGenerates HTML of highlited code from Nit source files."
+toolcontext.process_options(args)
 
 var model = new Model
 var modelbuilder = new ModelBuilder(model, toolcontext)
 
-toolcontext.process_options
 var args = toolcontext.option_context.rest
 
-if args.is_empty then
-       print "usage: nitlight [options] files..."
-       toolcontext.option_context.usage
-       return
-end
-
 var mmodules = modelbuilder.parse(args)
 modelbuilder.run_phases
 
@@ -53,13 +50,18 @@ end
 for mm in mmodules do
        if dir != null then toolcontext.info("write {dir}/{mm.name}.html", 1)
 
-       var v = new HighlightVisitor(modelbuilder)
+       var v = new HighlightVisitor
+
+       if opt_first_line.value != 0 then v.first_line = opt_first_line.value
+       if opt_last_line.value != 0 then v.last_line = opt_last_line.value
        if opt_ast.value then v.with_ast = true
        var page = null
+       var m = modelbuilder.mmodule2nmodule[mm]
        if not opt_fragment.value then
                page = new HTMLTag("html")
                page.add_raw_html """<head>
-               <meta charset="utf-8">"""
+               <meta charset="utf-8">
+               <title>file {{{m.location.file.filename}}}</title>"""
                if dir == null then
                        page.add_raw_html """
                        <style type="text/css">
@@ -69,21 +71,25 @@ for mm in mmodules do
                else
                        page.add_raw_html """<link rel="stylesheet" type="text/css" href="style.css" />"""
                end
-               page.add_raw_html "</head><body><pre>"
+               page.add_raw_html """<link rel="stylesheet" href="http://netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css">\n"""
+               page.add_raw_html "</head><body><pre class='nit_code'>"
        end
-       var m = modelbuilder.mmodule2nmodule[mm]
        v.enter_visit(m)
        if not opt_fragment.value then
                page.add(v.html)
-               page.add_raw_html "</pre></body>"
+               page.add_raw_html "</pre>"
+               page.add_raw_html """<script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>\n"""
+               page.add_raw_html """<script src="http://netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>\n"""
+               page.add_raw_html """<script>$(".popupable").popover({html:true, placement:'top'})/*initialize bootstrap popover*/</script>\n"""
+               page.add_raw_html "</body>"
        else
                page = v.html
        end
 
        if dir != null then
-               page.save("{dir}/{mm.name}.html")
+               page.write_to_file("{dir}/{mm.name}.html")
        else
-               print page.html
+               page.write_to(stdout)
        end
 end
 
@@ -104,9 +110,9 @@ if dir != null then
                n2.text(mm.name)
        end
        page.add_raw_html "</li></body>"
-       page.save("{dir}/index.html")
+       page.write_to_file("{dir}/index.html")
 
-       var v = new HighlightVisitor(modelbuilder)
+       var v = new HighlightVisitor
        toolcontext.info("write {dir}/style.css", 1)
        var f = new OFStream.open("{dir}/style.css")
        f.write v.css_content