X-Git-Url: http://nitlanguage.org diff --git a/src/highlight.nit b/src/highlight.nit index bfa0d0f..d70281e 100644 --- a/src/highlight.nit +++ b/src/highlight.nit @@ -15,7 +15,6 @@ # Highliting of Nit AST module highlight -import modelize_property import frontend import html import pipeline @@ -28,13 +27,21 @@ class HighlightVisitor # Is the HTML include a nested `` element for each `ANode` of the AST? # Used to have a really huge and verbose HTML (mainly for debug) - var with_ast writable = false + 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 writable = null + var first_line: nullable Int = null is writable # The last line to generate, null if finish at the last line - var last_line: nullable Int writable = null + var last_line: nullable Int = null is writable init do @@ -53,7 +60,6 @@ class HighlightVisitor do var stack2 = new Array[HTMLTag] var stack = new Array[Prod] - var closes = new Array[Prod] var line = 0 var c: nullable Token = first_token var hv = new HighlightVisitor @@ -84,7 +90,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 @@ -167,9 +174,9 @@ class HighlightVisitor return """ .nitcode a { color: inherit; cursor:pointer; } .nitcode .popupable:hover { text-decoration: underline; cursor:help; } /* underline titles */ -pre.nitcode .foldable { display: block } /* for block productions*/ -pre.nitcode .line{ display: block } /* for lines */ -pre.nitcode .line:hover{ background-color: #FFFFE0; } /* current line */ +.nitcode .foldable { display: block } /* for block productions*/ +.nitcode .line{ display: block } /* for lines */ +.nitcode .line:hover{ background-color: #FFFFE0; } /* current line */ .nitcode :target { background-color: #FFF3C2 } /* target highlight*/ /* lexical raw tokens. independent of usage or semantic: */ .nitcode .nc_c { color: gray; font-style: italic; } /* comment */ @@ -351,6 +358,8 @@ redef class MClassDef if mdoc == null then mdoc = mclass.intro.mdoc if mdoc != null then mdoc.fill_infobox(res) + if in_hierarchy == null then return res + if in_hierarchy.greaters.length > 1 then var c = res.new_dropdown("hier", "super-classes") for x in in_hierarchy.greaters do @@ -397,11 +406,11 @@ redef class MPropDef var res = new HInfoBox(v, to_s) res.href = href if self isa MMethodDef then - res.new_field("fun").append(mproperty.name).add msignature.linkto + if msignature != null then res.new_field("fun").append(mproperty.name).add msignature.linkto else if self isa MAttributeDef then - res.new_field("fun").append(mproperty.name).add static_mtype.linkto + if static_mtype != null then res.new_field("fun").append(mproperty.name).add static_mtype.linkto else if self isa MVirtualTypeDef then - res.new_field("add").append(mproperty.name).add bound.linkto + if bound != null then res.new_field("add").append(mproperty.name).add bound.linkto else res.new_field("wat?").append(mproperty.name) end @@ -474,13 +483,11 @@ redef class MParameterType redef fun infobox(v) do var res = new HInfoBox(v, to_s) - var name = mclass.intro.parameter_names[rank] res.new_field("parameter type").append("{name} from class ").add mclass.intro.linkto return res end redef fun linkto do - var name = mclass.intro.parameter_names[rank] return (new HTMLTag("span")).text(name) end end @@ -935,4 +942,3 @@ redef class AExpr return t.infobox(v) end end -