X-Git-Url: http://nitlanguage.org diff --git a/src/examples/nitlight_as_a_service.nit b/src/examples/nitlight_as_a_service.nit index e117268..103a3c8 100644 --- a/src/examples/nitlight_as_a_service.nit +++ b/src/examples/nitlight_as_a_service.nit @@ -22,87 +22,7 @@ import highlight import nitcorn import nitcorn::log import template - -# Fully process a content as a nit source file. -fun hightlightcode(hl: HighlightVisitor, content: String): HLCode -do - # Prepare a stand-alone tool context - var tc = new ToolContext - tc.nit_dir = tc.locate_nit_dir # still use the common lib to have core - tc.keep_going = true # no exit, obviously - tc.opt_warn.value = -1 # no output, obviously - - # Prepare an stand-alone model and model builder. - # Unfortunately, models are enclosing and append-only. - # There is no way (yet?) to have a shared module `core` with - # isolated and throwable user modules. - var model = new Model - var mb = new ModelBuilder(model, tc) - - # Parse the code - var source = new SourceFile.from_string("", content + "\n") - var lexer = new Lexer(source) - var parser = new Parser(lexer) - var tree = parser.parse - - var hlcode = new HLCode(hl, content, source) - - # Check syntax error - var eof = tree.n_eof - if eof isa AError then - mb.error(eof, eof.message) - hl.hightlight_source(source) - return hlcode - end - var amodule = tree.n_base.as(not null) - - # Load the AST as a module in the model - # Then process it - mb.load_rt_module(null, amodule, "") - mb.run_phases - - # Highlight the processed module - hl.enter_visit(amodule) - return hlcode -end - -# A standalone highlighted piece of code -class HLCode - # The highlighter used - var hl: HighlightVisitor - - # The raw code source - var content: String - - # The pseudo source-file - var source: SourceFile - - # JavaScript code to update an existing codemirror editor. - fun code_mirror_update: Template - do - - var res = new Template - res.add """ - function nitmessage() { - editor.operation(function(){ - for (var i = 0; i < widgets.length; ++i) - editor.removeLineWidget(widgets[i]); - widgets.length = 0; -""" - - for m in source.messages do - res.add """ - var l = document.createElement("div"); - l.className = "lint-error" - l.innerHTML = " {{{m.text.html_escape}}}"; - var w = editor.addLineWidget({{{m.location.line_start-1}}}, l); - widgets.push(w); -""" - end - res.add """});}""" - return res - end -end +import json::serialization_write # Nitcorn service to hightlight code # @@ -120,6 +40,13 @@ class HighlightAction var hlcode = null if code != null then hlcode = hightlightcode(hl, code) + if http_request.post_args.get_or_null("json") == "true" and hlcode != null then + var response = new HttpResponse(200) + response.header["Content-Type"] = "text/json" + response.body = hlcode.to_json + return response + end + if http_request.post_args.get_or_null("ajax") == "true" and hlcode != null then page.add hlcode.code_mirror_update page.add """