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] = |