src/Tools/jEdit/src/isabelle_markup.scala
changeset 45468 33e946d3f449
parent 45467 3f290b6288cf
child 45474 f793dd5d84b2
equal deleted inserted replaced
45467:3f290b6288cf 45468:33e946d3f449
    85   }
    85   }
    86 
    86 
    87 
    87 
    88   /* markup selectors */
    88   /* markup selectors */
    89 
    89 
    90   val message: Markup_Tree.Select[Color] =
    90   val message =
    91   {
    91     Markup_Tree.Select[Color](
    92     case Text.Info(_, XML.Elem(Markup(Markup.WRITELN, _), _)) => regular_color
    92     {
    93     case Text.Info(_, XML.Elem(Markup(Markup.WARNING, _), _)) => warning_color
    93       case Text.Info(_, XML.Elem(Markup(Markup.WRITELN, _), _)) => regular_color
    94     case Text.Info(_, XML.Elem(Markup(Markup.ERROR, _), _)) => error_color
    94       case Text.Info(_, XML.Elem(Markup(Markup.WARNING, _), _)) => warning_color
    95   }
    95       case Text.Info(_, XML.Elem(Markup(Markup.ERROR, _), _)) => error_color
       
    96     })
    96 
    97 
    97   val tooltip_message =
    98   val tooltip_message =
    98     Markup_Tree.Cumulate[SortedMap[Long, String]](SortedMap.empty,
    99     Markup_Tree.Cumulate[SortedMap[Long, String]](SortedMap.empty,
    99       {
   100       {
   100         case (msgs, Text.Info(_, msg @ XML.Elem(Markup(markup, Markup.Serial(serial)), _)))
   101         case (msgs, Text.Info(_, msg @ XML.Elem(Markup(markup, Markup.Serial(serial)), _)))
   101         if markup == Markup.WRITELN || markup == Markup.WARNING || markup == Markup.ERROR =>
   102         if markup == Markup.WRITELN || markup == Markup.WARNING || markup == Markup.ERROR =>
   102           msgs + (serial ->
   103           msgs + (serial ->
   103             Pretty.string_of(List(msg), margin = Isabelle.Int_Property("tooltip-margin")))
   104             Pretty.string_of(List(msg), margin = Isabelle.Int_Property("tooltip-margin")))
   104       })
   105       })
   105 
   106 
   106   val gutter_message: Markup_Tree.Select[Icon] =
   107   val gutter_message =
   107   {
   108     Markup_Tree.Select[Icon](
   108     case Text.Info(_, XML.Elem(Markup(Markup.WARNING, _), body)) =>
   109       {
   109       body match {
   110         case Text.Info(_, XML.Elem(Markup(Markup.WARNING, _), body)) =>
   110         case List(XML.Elem(Markup(Markup.LEGACY, _), _)) => legacy_icon
   111           body match {
   111         case _ => warning_icon
   112             case List(XML.Elem(Markup(Markup.LEGACY, _), _)) => legacy_icon
   112       }
   113             case _ => warning_icon
   113     case Text.Info(_, XML.Elem(Markup(Markup.ERROR, _), _)) => error_icon
   114           }
   114   }
   115         case Text.Info(_, XML.Elem(Markup(Markup.ERROR, _), _)) => error_icon
   115 
   116       })
   116   val background1: Markup_Tree.Select[Color] =
   117 
   117   {
   118   val background1 =
   118     case Text.Info(_, XML.Elem(Markup(Markup.BAD, _), _)) => bad_color
   119     Markup_Tree.Select[Color](
   119     case Text.Info(_, XML.Elem(Markup(Markup.HILITE, _), _)) => hilite_color
   120       {
   120   }
   121         case Text.Info(_, XML.Elem(Markup(Markup.BAD, _), _)) => bad_color
   121 
   122         case Text.Info(_, XML.Elem(Markup(Markup.HILITE, _), _)) => hilite_color
   122   val background2: Markup_Tree.Select[Color] =
   123       })
   123   {
   124 
   124     case Text.Info(_, XML.Elem(Markup(Markup.TOKEN_RANGE, _), _)) => light_color
   125   val background2 =
   125   }
   126     Markup_Tree.Select[Color](
   126 
   127       {
   127   val foreground: Markup_Tree.Select[Color] =
   128         case Text.Info(_, XML.Elem(Markup(Markup.TOKEN_RANGE, _), _)) => light_color
   128   {
   129       })
   129     case Text.Info(_, XML.Elem(Markup(Markup.STRING, _), _)) => quoted_color
   130 
   130     case Text.Info(_, XML.Elem(Markup(Markup.ALTSTRING, _), _)) => quoted_color
   131   val foreground =
   131     case Text.Info(_, XML.Elem(Markup(Markup.VERBATIM, _), _)) => quoted_color
   132     Markup_Tree.Select[Color](
   132   }
   133       {
       
   134         case Text.Info(_, XML.Elem(Markup(Markup.STRING, _), _)) => quoted_color
       
   135         case Text.Info(_, XML.Elem(Markup(Markup.ALTSTRING, _), _)) => quoted_color
       
   136         case Text.Info(_, XML.Elem(Markup(Markup.VERBATIM, _), _)) => quoted_color
       
   137       })
   133 
   138 
   134   private val text_colors: Map[String, Color] =
   139   private val text_colors: Map[String, Color] =
   135     Map(
   140     Map(
   136       Markup.STRING -> get_color("black"),
   141       Markup.STRING -> get_color("black"),
   137       Markup.ALTSTRING -> get_color("black"),
   142       Markup.ALTSTRING -> get_color("black"),
   154       Markup.ML_STRING -> get_color("#D2691E"),
   159       Markup.ML_STRING -> get_color("#D2691E"),
   155       Markup.ML_COMMENT -> get_color("#8B0000"),
   160       Markup.ML_COMMENT -> get_color("#8B0000"),
   156       Markup.ML_MALFORMED -> get_color("#FF6A6A"),
   161       Markup.ML_MALFORMED -> get_color("#FF6A6A"),
   157       Markup.ANTIQ -> get_color("blue"))
   162       Markup.ANTIQ -> get_color("blue"))
   158 
   163 
   159   val text_color: Markup_Tree.Select[Color] =
   164   val text_color =
   160   {
   165     Markup_Tree.Select[Color](
   161     case Text.Info(_, XML.Elem(Markup(m, _), _)) if text_colors.isDefinedAt(m) => text_colors(m)
   166       {
   162   }
   167         case Text.Info(_, XML.Elem(Markup(m, _), _)) if text_colors.isDefinedAt(m) => text_colors(m)
       
   168       })
   163 
   169 
   164   private val tooltips: Map[String, String] =
   170   private val tooltips: Map[String, String] =
   165     Map(
   171     Map(
   166       Markup.SORT -> "sort",
   172       Markup.SORT -> "sort",
   167       Markup.TYP -> "type",
   173       Markup.TYP -> "type",
   179 
   185 
   180   private def string_of_typing(kind: String, body: XML.Body): String =
   186   private def string_of_typing(kind: String, body: XML.Body): String =
   181     Pretty.string_of(List(Pretty.block(XML.Text(kind) :: Pretty.Break(1) :: body)),
   187     Pretty.string_of(List(Pretty.block(XML.Text(kind) :: Pretty.Break(1) :: body)),
   182       margin = Isabelle.Int_Property("tooltip-margin"))
   188       margin = Isabelle.Int_Property("tooltip-margin"))
   183 
   189 
   184   val tooltip1: Markup_Tree.Select[String] =
   190   val tooltip1 =
   185   {
   191     Markup_Tree.Select[String](
   186     case Text.Info(_, XML.Elem(Markup.Entity(kind, name), _)) => kind + " " + quote(name)
   192       {
   187     case Text.Info(_, XML.Elem(Markup(Markup.ML_TYPING, _), body)) => string_of_typing("ML:", body)
   193         case Text.Info(_, XML.Elem(Markup.Entity(kind, name), _)) => kind + " " + quote(name)
   188     case Text.Info(_, XML.Elem(Markup(name, _), _))
   194         case Text.Info(_, XML.Elem(Markup(Markup.ML_TYPING, _), body)) => string_of_typing("ML:", body)
   189     if tooltips.isDefinedAt(name) => tooltips(name)
   195         case Text.Info(_, XML.Elem(Markup(name, _), _))
   190   }
   196         if tooltips.isDefinedAt(name) => tooltips(name)
   191 
   197       })
   192   val tooltip2: Markup_Tree.Select[String] =
   198 
   193   {
   199   val tooltip2 =
   194     case Text.Info(_, XML.Elem(Markup(Markup.TYPING, _), body)) => string_of_typing("::", body)
   200     Markup_Tree.Select[String](
   195   }
   201       {
       
   202         case Text.Info(_, XML.Elem(Markup(Markup.TYPING, _), body)) => string_of_typing("::", body)
       
   203       })
   196 
   204 
   197   private val subexp_include =
   205   private val subexp_include =
   198     Set(Markup.SORT, Markup.TYP, Markup.TERM, Markup.PROP, Markup.ML_TYPING, Markup.TOKEN_RANGE,
   206     Set(Markup.SORT, Markup.TYP, Markup.TERM, Markup.PROP, Markup.ML_TYPING, Markup.TOKEN_RANGE,
   199       Markup.ENTITY, Markup.FREE, Markup.SKOLEM, Markup.BOUND, Markup.VAR,
   207       Markup.ENTITY, Markup.FREE, Markup.SKOLEM, Markup.BOUND, Markup.VAR,
   200       Markup.TFREE, Markup.TVAR, Markup.ML_SOURCE, Markup.DOC_SOURCE)
   208       Markup.TFREE, Markup.TVAR, Markup.ML_SOURCE, Markup.DOC_SOURCE)
   201 
   209 
   202   val subexp: Markup_Tree.Select[(Text.Range, Color)] =
   210   val subexp =
   203   {
   211     Markup_Tree.Select[(Text.Range, Color)](
   204     case Text.Info(range, XML.Elem(Markup(name, _), _)) if subexp_include(name) =>
   212       {
   205       (range, subexp_color)
   213         case Text.Info(range, XML.Elem(Markup(name, _), _)) if subexp_include(name) =>
   206   }
   214           (range, subexp_color)
       
   215       })
   207 
   216 
   208 
   217 
   209   /* token markup -- text styles */
   218   /* token markup -- text styles */
   210 
   219 
   211   private val command_style: Map[String, Byte] =
   220   private val command_style: Map[String, Byte] =