rendering of selected dialog_result as active_result_color, depending on dynamic command status in output panel, but not static popups etc.;
1 (* Title: Pure/Syntax/term_position.ML
4 Encoded position within term syntax trees.
7 signature TERM_POSITION =
9 val pretty: Position.T -> Pretty.T
10 val encode: Position.T -> string
11 val decode: string -> Position.T option
12 val decode_position: term -> (Position.T * typ) option
13 val decode_positionT: typ -> Position.T option
14 val decode_positionS: sort -> Position.T list * sort
15 val is_position: term -> bool
16 val is_positionT: typ -> bool
17 val strip_positions: term -> term
20 structure Term_Position: TERM_POSITION =
25 val position_dummy = "<position>";
26 val position_text = XML.Text position_dummy;
29 Pretty.markup (Position.markup pos Markup.position) [Pretty.str position_dummy];
32 YXML.string_of (XML.Elem (Position.markup pos Markup.position, [position_text]));
35 (case YXML.parse_body str handle Fail msg => error msg of
36 [XML.Elem ((name, props), [arg])] =>
37 if name = Markup.positionN andalso arg = position_text
38 then SOME (Position.of_properties props)
43 (* positions within parse trees *)
45 fun decode_position (Free (x, _)) =
47 SOME pos => SOME (pos, TFree (x, dummyS))
49 | decode_position _ = NONE;
51 fun decode_positionT (TFree (x, _)) = decode x
52 | decode_positionT _ = NONE;
54 fun decode_positionS cs =
55 let val (ps, sort) = List.partition (is_some o decode) cs
56 in (map (the o decode) ps, sort) end;
58 val is_position = is_some o decode_position;
59 val is_positionT = is_some o decode_positionT;
61 fun strip_positions ((t as Const (c, _)) $ u $ v) =
62 if (c = "_constrain" orelse c = "_constrainAbs" orelse c = "_ofsort") andalso is_position v
63 then strip_positions u
64 else t $ strip_positions u $ strip_positions v
65 | strip_positions (t $ u) = strip_positions t $ strip_positions u
66 | strip_positions (Abs (x, T, t)) = Abs (x, T, strip_positions t)
67 | strip_positions t = t;