179 /* markup selectors */ |
179 /* markup selectors */ |
180 |
180 |
181 private val highlight_include = |
181 private val highlight_include = |
182 Set(Isabelle_Markup.SORT, Isabelle_Markup.TYP, Isabelle_Markup.TERM, Isabelle_Markup.PROP, |
182 Set(Isabelle_Markup.SORT, Isabelle_Markup.TYP, Isabelle_Markup.TERM, Isabelle_Markup.PROP, |
183 Isabelle_Markup.ML_TYPING, Isabelle_Markup.TOKEN_RANGE, Isabelle_Markup.ENTITY, |
183 Isabelle_Markup.ML_TYPING, Isabelle_Markup.TOKEN_RANGE, Isabelle_Markup.ENTITY, |
184 Isabelle_Markup.PATH, Isabelle_Markup.TYPING, Isabelle_Markup.FREE, Isabelle_Markup.SKOLEM, |
184 Isabelle_Markup.PATH, Isabelle_Markup.SORTING, Isabelle_Markup.TYPING, Isabelle_Markup.FREE, |
185 Isabelle_Markup.BOUND, Isabelle_Markup.VAR, Isabelle_Markup.TFREE, Isabelle_Markup.TVAR, |
185 Isabelle_Markup.SKOLEM, Isabelle_Markup.BOUND, Isabelle_Markup.VAR, Isabelle_Markup.TFREE, |
186 Isabelle_Markup.ML_SOURCE, Isabelle_Markup.DOCUMENT_SOURCE) |
186 Isabelle_Markup.TVAR, Isabelle_Markup.ML_SOURCE, Isabelle_Markup.DOCUMENT_SOURCE) |
187 |
187 |
188 def highlight(range: Text.Range): Option[Text.Info[Color]] = |
188 def highlight(range: Text.Range): Option[Text.Info[Color]] = |
189 { |
189 { |
190 snapshot.select_markup(range, Some(highlight_include), |
190 snapshot.select_markup(range, Some(highlight_include), |
191 { |
191 { |
297 Isabelle_Markup.TVAR -> "schematic type variable", |
297 Isabelle_Markup.TVAR -> "schematic type variable", |
298 Isabelle_Markup.ML_SOURCE -> "ML source", |
298 Isabelle_Markup.ML_SOURCE -> "ML source", |
299 Isabelle_Markup.DOCUMENT_SOURCE -> "document source") |
299 Isabelle_Markup.DOCUMENT_SOURCE -> "document source") |
300 |
300 |
301 private val tooltip_elements = |
301 private val tooltip_elements = |
302 Set(Isabelle_Markup.ENTITY, Isabelle_Markup.TYPING, Isabelle_Markup.ML_TYPING, |
302 Set(Isabelle_Markup.ENTITY, Isabelle_Markup.SORTING, Isabelle_Markup.TYPING, |
303 Isabelle_Markup.PATH) ++ tooltips.keys |
303 Isabelle_Markup.ML_TYPING, Isabelle_Markup.PATH) ++ tooltips.keys |
304 |
304 |
305 private def string_of_typing(kind: String, body: XML.Body): String = |
305 private def string_of_typing(kind: String, body: XML.Body): String = |
306 Pretty.string_of(List(Pretty.block(XML.Text(kind) :: Pretty.Break(1) :: body)), |
306 Pretty.string_of(List(Pretty.block(XML.Text(kind) :: Pretty.Break(1) :: body)), |
307 margin = options.int("jedit_tooltip_margin")) |
307 margin = options.int("jedit_tooltip_margin")) |
308 |
308 |
320 add(prev, r, (true, kind1 + " " + quote(name))) |
320 add(prev, r, (true, kind1 + " " + quote(name))) |
321 case (prev, Text.Info(r, XML.Elem(Isabelle_Markup.Path(name), _))) |
321 case (prev, Text.Info(r, XML.Elem(Isabelle_Markup.Path(name), _))) |
322 if Path.is_ok(name) => |
322 if Path.is_ok(name) => |
323 val jedit_file = Isabelle.thy_load.append(snapshot.node_name.dir, Path.explode(name)) |
323 val jedit_file = Isabelle.thy_load.append(snapshot.node_name.dir, Path.explode(name)) |
324 add(prev, r, (true, "file " + quote(jedit_file))) |
324 add(prev, r, (true, "file " + quote(jedit_file))) |
325 case (prev, Text.Info(r, XML.Elem(Markup(Isabelle_Markup.TYPING, _), body))) => |
325 case (prev, Text.Info(r, XML.Elem(Markup(name, _), body))) |
|
326 if name == Isabelle_Markup.SORTING || name == Isabelle_Markup.TYPING => |
326 add(prev, r, (true, string_of_typing("::", body))) |
327 add(prev, r, (true, string_of_typing("::", body))) |
327 case (prev, Text.Info(r, XML.Elem(Markup(Isabelle_Markup.ML_TYPING, _), body))) => |
328 case (prev, Text.Info(r, XML.Elem(Markup(Isabelle_Markup.ML_TYPING, _), body))) => |
328 add(prev, r, (false, string_of_typing("ML:", body))) |
329 add(prev, r, (false, string_of_typing("ML:", body))) |
329 case (prev, Text.Info(r, XML.Elem(Markup(name, _), _))) |
330 case (prev, Text.Info(r, XML.Elem(Markup(name, _), _))) |
330 if tooltips.isDefinedAt(name) => add(prev, r, (true, tooltips(name))) |
331 if tooltips.isDefinedAt(name) => add(prev, r, (true, tooltips(name))) |