var toolcontext = new ToolContext
+# Disable `cached` because it causes issues when printing transformed AST. FIXME
+toolcontext.cached_phase.disabled = true
+
+# Try to colorize, even if programs are non valid
+toolcontext.keep_going = true
+
var opt_fragment = new OptionBool("Omit document header and footer", "-f", "--fragment")
+var opt_line_id_prefix = new OptionString("Prefix of the id of each line <span> element", "--line-id-prefix")
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_first_line, opt_last_line, opt_dir, opt_full)
+toolcontext.option_context.add_option(opt_fragment, opt_line_id_prefix, 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(args)
var args = toolcontext.option_context.rest
-var mmodules = modelbuilder.parse(args)
+var mmodules = modelbuilder.parse_full(args)
modelbuilder.run_phases
if opt_full.value then mmodules = model.mmodules
if dir != null then toolcontext.info("write {dir}/{mm.name}.html", 1)
var v = new HighlightVisitor
+ var prefix = opt_line_id_prefix.value
+ if prefix != null then
+ v.line_id_prefix = prefix.trim
+ end
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.mmodule2node(mm)
+ assert m != null
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">
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 v.head_content
+ 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 v.foot_content
+ page.add_raw_html "</body>"
else
page = v.html
end