From: Jean Privat Date: Mon, 13 Jun 2016 20:44:37 +0000 (-0400) Subject: nitlight: use contextual links X-Git-Url: http://nitlanguage.org nitlight: use contextual links Signed-off-by: Jean Privat --- diff --git a/src/nitlight.nit b/src/nitlight.nit index 176ec5f..554bc00 100644 --- a/src/nitlight.nit +++ b/src/nitlight.nit @@ -17,6 +17,71 @@ module nitlight import highlight +class NitlightVisitor + super HighlightVisitor + + # The current highlight module + # + # It is used to know when to use anchored local links + var current_module: MModule + + # List of all highlighted modules + # + # It is used to have links that only targets highlighted entities + # + # Entities outside these modules will not be linked. + var mmodules: Collection[MModule] + + redef fun hrefto(entitiy) do return entitiy.href(self) +end + +redef class MEntity + private fun href(v: NitlightVisitor): nullable String do return null +end + +redef class MModule + redef fun href(v) + do + if self == v.current_module then return "" + if not v.mmodules.has(self) then return null + return c_name + ".html" + end +end + +redef class MClass + redef fun href(v) + do + # Because we only have code, just link to the introduction + return intro.href(v) + end +end + +redef class MClassDef + redef fun href(v) + do + var m = mmodule.href(v) + if m == null then return null + return m + "#" + to_s + end +end + +redef class MProperty + redef fun href(v) + do + # Because we only have code, just link to the introduction + return intro.href(v) + end +end + +redef class MPropDef + redef fun href(v) + do + var m = mclassdef.mmodule.href(v) + if m == null then return null + return m + "#" + to_s + end +end + var toolcontext = new ToolContext # Try to colorize, even if programs are non valid @@ -54,7 +119,7 @@ end for mm in mmodules do if dir != null then toolcontext.info("write {dir}/{mm.c_name}.html", 1) - var v = new HighlightVisitor + var v = new NitlightVisitor(mm, mmodules) var prefix = opt_line_id_prefix.value if prefix != null then v.line_id_prefix = prefix.trim