X-Git-Url: http://nitlanguage.org diff --git a/src/highlight.nit b/src/highlight.nit index 5e3acf1..39a042a 100644 --- a/src/highlight.nit +++ b/src/highlight.nit @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -# Highliting of Nit AST +# Highlighting of Nit AST module highlight import frontend @@ -29,6 +29,14 @@ class HighlightVisitor # Used to have a really huge and verbose HTML (mainly for debug) var with_ast = false is writable + # Prefixes used in generated IDs for line `` elements. + # Useful if more than one highlighted code is present in the same HTML document. + # + # If set to the empty string, id for lines are disabled. + # + # Is `"L"` by default. + var line_id_prefix = "L" is writable + # The first line to generate, null if start at the first line var first_line: nullable Int = null is writable @@ -40,6 +48,8 @@ class HighlightVisitor html.add_class("nitcode") end + # The entry-point of the highlighting. + # Will fill `html` with the generated HTML content. fun enter_visit(n: ANode) do n.parentize_tokens @@ -82,7 +92,8 @@ class HighlightVisitor # Add a div for the whole line var tag = new HTMLTag("span") - tag.attrs["id"] = "L{cline}" + var p = line_id_prefix + if p != "" then tag.attrs["id"] = "{p}{cline}" tag.classes.add "line" stack2.add(html) html.add tag @@ -320,6 +331,7 @@ redef class MModule return res end + # The module HTML page fun href: String do return name + ".html" @@ -377,6 +389,7 @@ redef class MClassDef return res end + # The class HTML page (an anchor in the module page) fun href: String do return mmodule.href + "#" + to_s @@ -423,6 +436,7 @@ redef class MPropDef return res end + # The property HTML page (an anchor in the module page) fun href: String do return self.mclassdef.mmodule.href + "#" + self.to_s @@ -496,6 +510,33 @@ redef class MNullableType end end +redef class MNotNullType + redef fun infobox(v) + do + return mtype.infobox(v) + end + redef fun linkto + do + var res = new HTMLTag("span") + res.append("not null ").add(mtype.linkto) + return res + end +end + +redef class MNullType + redef fun infobox(v) + do + var res = new HInfoBox(v, to_s) + return res + end + redef fun linkto + do + var res = new HTMLTag("span") + res.append("null") + return res + end +end + redef class MSignature redef fun linkto do @@ -856,8 +897,8 @@ redef class AType do var mt = mtype if mt == null then return null - mt = mt.as_notnullable - if mt isa MVirtualType or mt isa MParameterType then + mt = mt.undecorate + if mt isa MFormalType then res.add_class("nc_vt") end return mt.infobox(v)