src/Tools/jEdit/src/isabelle_rendering.scala
changeset 49355 7d1af0a6e797
parent 49321 a48f9bbbe720
child 49356 6e0c0ffb6ec7
equal deleted inserted replaced
49354:65c6a1d62dbc 49355:7d1af0a6e797
    50       else {
    50       else {
    51         val (status, pri) =
    51         val (status, pri) =
    52           ((Protocol.Status.init, 0) /: results) {
    52           ((Protocol.Status.init, 0) /: results) {
    53             case ((s1, p1), Text.Info(_, (s2, p2))) => (s1 + s2, p1 max p2) }
    53             case ((s1, p1), Text.Info(_, (s2, p2))) => (s1 + s2, p1 max p2) }
    54 
    54 
    55         if (pri == warning_pri) Some(color_value("color_warning"))
    55         if (pri == warning_pri) Some(color_value("warning_color"))
    56         else if (pri == error_pri) Some(color_value("color_error"))
    56         else if (pri == error_pri) Some(color_value("error_color"))
    57         else if (status.is_unprocessed) Some(color_value("color_unprocessed"))
    57         else if (status.is_unprocessed) Some(color_value("unprocessed_color"))
    58         else if (status.is_running) Some(color_value("color_running"))
    58         else if (status.is_running) Some(color_value("running_color"))
    59         else if (status.is_failed) Some(color_value("color_error"))
    59         else if (status.is_failed) Some(color_value("error_color"))
    60         else None
    60         else None
    61       }
    61       }
    62     }
    62     }
    63   }
    63   }
    64 
    64 
    75   def subexp(snapshot: Document.Snapshot, range: Text.Range): Option[Text.Info[Color]] =
    75   def subexp(snapshot: Document.Snapshot, range: Text.Range): Option[Text.Info[Color]] =
    76   {
    76   {
    77     snapshot.select_markup(range, Some(subexp_include),
    77     snapshot.select_markup(range, Some(subexp_include),
    78         {
    78         {
    79           case Text.Info(info_range, XML.Elem(Markup(name, _), _)) if subexp_include(name) =>
    79           case Text.Info(info_range, XML.Elem(Markup(name, _), _)) if subexp_include(name) =>
    80             Text.Info(snapshot.convert(info_range), color_value("color_subexp"))
    80             Text.Info(snapshot.convert(info_range), color_value("subexp_color"))
    81         }) match { case Text.Info(_, info) #:: _ => Some(info) case _ => None }
    81         }) match { case Text.Info(_, info) #:: _ => Some(info) case _ => None }
    82   }
    82   }
    83 
    83 
    84 
    84 
    85   private val hyperlink_include = Set(Isabelle_Markup.ENTITY, Isabelle_Markup.PATH)
    85   private val hyperlink_include = Set(Isabelle_Markup.ENTITY, Isabelle_Markup.PATH)
   228 
   228 
   229 
   229 
   230   def squiggly_underline(snapshot: Document.Snapshot, range: Text.Range): Stream[Text.Info[Color]] =
   230   def squiggly_underline(snapshot: Document.Snapshot, range: Text.Range): Stream[Text.Info[Color]] =
   231   {
   231   {
   232     val squiggly_colors = Map(
   232     val squiggly_colors = Map(
   233       writeln_pri -> color_value("color_writeln"),
   233       writeln_pri -> color_value("writeln_color"),
   234       warning_pri -> color_value("color_warning"),
   234       warning_pri -> color_value("warning_color"),
   235       error_pri -> color_value("color_error"))
   235       error_pri -> color_value("error_color"))
   236 
   236 
   237     val results =
   237     val results =
   238       snapshot.cumulate_markup[Int](range, 0,
   238       snapshot.cumulate_markup[Int](range, 0,
   239         Some(Set(Isabelle_Markup.WRITELN, Isabelle_Markup.WARNING, Isabelle_Markup.ERROR)),
   239         Some(Set(Isabelle_Markup.WRITELN, Isabelle_Markup.WARNING, Isabelle_Markup.ERROR)),
   240         {
   240         {
   253   }
   253   }
   254 
   254 
   255 
   255 
   256   def background1(snapshot: Document.Snapshot, range: Text.Range): Stream[Text.Info[Color]] =
   256   def background1(snapshot: Document.Snapshot, range: Text.Range): Stream[Text.Info[Color]] =
   257   {
   257   {
   258     if (snapshot.is_outdated) Stream(Text.Info(range, color_value("color_outdated")))
   258     if (snapshot.is_outdated) Stream(Text.Info(range, color_value("outdated_color")))
   259     else
   259     else
   260       for {
   260       for {
   261         Text.Info(r, result) <-
   261         Text.Info(r, result) <-
   262           snapshot.cumulate_markup[(Option[Protocol.Status], Option[Color])](
   262           snapshot.cumulate_markup[(Option[Protocol.Status], Option[Color])](
   263             range, (Some(Protocol.Status.init), None),
   263             range, (Some(Protocol.Status.init), None),
   265             {
   265             {
   266               case (((Some(status), color), Text.Info(_, XML.Elem(markup, _))))
   266               case (((Some(status), color), Text.Info(_, XML.Elem(markup, _))))
   267               if (Protocol.command_status_markup(markup.name)) =>
   267               if (Protocol.command_status_markup(markup.name)) =>
   268                 (Some(Protocol.command_status(status, markup)), color)
   268                 (Some(Protocol.command_status(status, markup)), color)
   269               case (_, Text.Info(_, XML.Elem(Markup(Isabelle_Markup.BAD, _), _))) =>
   269               case (_, Text.Info(_, XML.Elem(Markup(Isabelle_Markup.BAD, _), _))) =>
   270                 (None, Some(color_value("color_bad")))
   270                 (None, Some(color_value("bad_color")))
   271               case (_, Text.Info(_, XML.Elem(Markup(Isabelle_Markup.HILITE, _), _))) =>
   271               case (_, Text.Info(_, XML.Elem(Markup(Isabelle_Markup.HILITE, _), _))) =>
   272                 (None, Some(color_value("color_hilite")))
   272                 (None, Some(color_value("hilite_color")))
   273             })
   273             })
   274         color <-
   274         color <-
   275           (result match {
   275           (result match {
   276             case (Some(status), opt_color) =>
   276             case (Some(status), opt_color) =>
   277               if (status.is_unprocessed) Some(color_value("color_unprocessed1"))
   277               if (status.is_unprocessed) Some(color_value("unprocessed1_color"))
   278               else if (status.is_running) Some(color_value("color_running1"))
   278               else if (status.is_running) Some(color_value("running1_color"))
   279               else opt_color
   279               else opt_color
   280             case (_, opt_color) => opt_color
   280             case (_, opt_color) => opt_color
   281           })
   281           })
   282       } yield Text.Info(r, color)
   282       } yield Text.Info(r, color)
   283   }
   283   }
   286   def background2(snapshot: Document.Snapshot, range: Text.Range): Stream[Text.Info[Color]] =
   286   def background2(snapshot: Document.Snapshot, range: Text.Range): Stream[Text.Info[Color]] =
   287     snapshot.select_markup(range,
   287     snapshot.select_markup(range,
   288       Some(Set(Isabelle_Markup.TOKEN_RANGE)),
   288       Some(Set(Isabelle_Markup.TOKEN_RANGE)),
   289       {
   289       {
   290         case Text.Info(_, XML.Elem(Markup(Isabelle_Markup.TOKEN_RANGE, _), _)) =>
   290         case Text.Info(_, XML.Elem(Markup(Isabelle_Markup.TOKEN_RANGE, _), _)) =>
   291           color_value("color_light")
   291           color_value("light_color")
   292       })
   292       })
   293 
   293 
   294 
   294 
   295   def foreground(snapshot: Document.Snapshot, range: Text.Range): Stream[Text.Info[Color]] =
   295   def foreground(snapshot: Document.Snapshot, range: Text.Range): Stream[Text.Info[Color]] =
   296     snapshot.select_markup(range,
   296     snapshot.select_markup(range,
   297       Some(Set(Isabelle_Markup.STRING, Isabelle_Markup.ALTSTRING, Isabelle_Markup.VERBATIM)),
   297       Some(Set(Isabelle_Markup.STRING, Isabelle_Markup.ALTSTRING, Isabelle_Markup.VERBATIM)),
   298       {
   298       {
   299         case Text.Info(_, XML.Elem(Markup(Isabelle_Markup.STRING, _), _)) =>
   299         case Text.Info(_, XML.Elem(Markup(Isabelle_Markup.STRING, _), _)) =>
   300           color_value("color_quoted")
   300           color_value("quoted_color")
   301         case Text.Info(_, XML.Elem(Markup(Isabelle_Markup.ALTSTRING, _), _)) =>
   301         case Text.Info(_, XML.Elem(Markup(Isabelle_Markup.ALTSTRING, _), _)) =>
   302           color_value("color_quoted")
   302           color_value("quoted_color")
   303         case Text.Info(_, XML.Elem(Markup(Isabelle_Markup.VERBATIM, _), _)) =>
   303         case Text.Info(_, XML.Elem(Markup(Isabelle_Markup.VERBATIM, _), _)) =>
   304           color_value("color_quoted")
   304           color_value("quoted_color")
   305       })
   305       })
   306 
   306 
   307 
   307 
   308   def text_color(snapshot: Document.Snapshot, range: Text.Range, color: Color)
   308   def text_color(snapshot: Document.Snapshot, range: Text.Range, color: Color)
   309       : Stream[Text.Info[Color]] =
   309       : Stream[Text.Info[Color]] =
   310   {
   310   {
   311     val text_colors: Map[String, Color] = Map(
   311     val text_colors: Map[String, Color] = Map(
   312       Isabelle_Markup.STRING -> Color.BLACK,
   312       Isabelle_Markup.STRING -> Color.BLACK,
   313       Isabelle_Markup.ALTSTRING -> Color.BLACK,
   313       Isabelle_Markup.ALTSTRING -> Color.BLACK,
   314       Isabelle_Markup.VERBATIM -> Color.BLACK,
   314       Isabelle_Markup.VERBATIM -> Color.BLACK,
   315       Isabelle_Markup.LITERAL -> color_value("color_keyword1"),
   315       Isabelle_Markup.LITERAL -> color_value("keyword1_color"),
   316       Isabelle_Markup.DELIMITER -> Color.BLACK,
   316       Isabelle_Markup.DELIMITER -> Color.BLACK,
   317       Isabelle_Markup.TFREE -> color_value("color_variable_type"),
   317       Isabelle_Markup.TFREE -> color_value("tfree_color"),
   318       Isabelle_Markup.TVAR -> color_value("color_variable_type"),
   318       Isabelle_Markup.TVAR -> color_value("tvar_color"),
   319       Isabelle_Markup.FREE -> color_value("color_variable_free"),
   319       Isabelle_Markup.FREE -> color_value("free_color"),
   320       Isabelle_Markup.SKOLEM -> color_value("color_variable_skolem"),
   320       Isabelle_Markup.SKOLEM -> color_value("skolem_color"),
   321       Isabelle_Markup.BOUND -> color_value("color_variable_bound"),
   321       Isabelle_Markup.BOUND -> color_value("bound_color"),
   322       Isabelle_Markup.VAR -> color_value("color_variable_schematic"),
   322       Isabelle_Markup.VAR -> color_value("var_color"),
   323       Isabelle_Markup.INNER_STRING -> color_value("color_inner_quoted"),
   323       Isabelle_Markup.INNER_STRING -> color_value("inner_quoted_color"),
   324       Isabelle_Markup.INNER_COMMENT -> color_value("color_inner_comment"),
   324       Isabelle_Markup.INNER_COMMENT -> color_value("inner_comment_color"),
   325       Isabelle_Markup.DYNAMIC_FACT -> color_value("color_dynamic"),
   325       Isabelle_Markup.DYNAMIC_FACT -> color_value("dynamic_color"),
   326       Isabelle_Markup.ML_KEYWORD -> color_value("color_keyword1"),
   326       Isabelle_Markup.ML_KEYWORD -> color_value("keyword1_color"),
   327       Isabelle_Markup.ML_DELIMITER -> Color.BLACK,
   327       Isabelle_Markup.ML_DELIMITER -> Color.BLACK,
   328       Isabelle_Markup.ML_NUMERAL -> color_value("color_inner_numeral"),
   328       Isabelle_Markup.ML_NUMERAL -> color_value("inner_numeral_color"),
   329       Isabelle_Markup.ML_CHAR -> color_value("color_inner_quoted"),
   329       Isabelle_Markup.ML_CHAR -> color_value("inner_quoted_color"),
   330       Isabelle_Markup.ML_STRING -> color_value("color_inner_quoted"),
   330       Isabelle_Markup.ML_STRING -> color_value("inner_quoted_color"),
   331       Isabelle_Markup.ML_COMMENT -> color_value("color_inner_comment"),
   331       Isabelle_Markup.ML_COMMENT -> color_value("inner_comment_color"),
   332       Isabelle_Markup.ANTIQ -> color_value("color_antiquotation"))
   332       Isabelle_Markup.ANTIQ -> color_value("antiquotation_color"))
   333 
   333 
   334     val text_color_elements = Set.empty[String] ++ text_colors.keys
   334     val text_color_elements = Set.empty[String] ++ text_colors.keys
   335 
   335 
   336     snapshot.cumulate_markup(range, color, Some(text_color_elements),
   336     snapshot.cumulate_markup(range, color, Some(text_color_elements),
   337       {
   337       {