| author | haftmann |
| Mon, 23 Dec 2013 14:24:20 +0100 | |
| changeset 54847 | d6cf9a5b9be9 |
| parent 52697 | 6fb98a20c349 |
| child 63518 | ae8fd6fe63a1 |
| permissions | -rw-r--r-- |
|
50450
358b6020f8b6
generalized notion of active area, where sendback is just one application;
wenzelm
parents:
50215
diff
changeset
|
1 |
(* Title: Pure/PIDE/active.ML |
|
50163
c62ce309dc26
more abstract Sendback operations, with explicit id/exec_id properties;
wenzelm
parents:
diff
changeset
|
2 |
Author: Makarius |
|
c62ce309dc26
more abstract Sendback operations, with explicit id/exec_id properties;
wenzelm
parents:
diff
changeset
|
3 |
|
|
50450
358b6020f8b6
generalized notion of active area, where sendback is just one application;
wenzelm
parents:
50215
diff
changeset
|
4 |
Active areas within the document (see also Tools/jEdit/src/active.scala). |
|
50163
c62ce309dc26
more abstract Sendback operations, with explicit id/exec_id properties;
wenzelm
parents:
diff
changeset
|
5 |
*) |
|
c62ce309dc26
more abstract Sendback operations, with explicit id/exec_id properties;
wenzelm
parents:
diff
changeset
|
6 |
|
|
50450
358b6020f8b6
generalized notion of active area, where sendback is just one application;
wenzelm
parents:
50215
diff
changeset
|
7 |
signature ACTIVE = |
|
50163
c62ce309dc26
more abstract Sendback operations, with explicit id/exec_id properties;
wenzelm
parents:
diff
changeset
|
8 |
sig |
|
50450
358b6020f8b6
generalized notion of active area, where sendback is just one application;
wenzelm
parents:
50215
diff
changeset
|
9 |
val make_markup: string -> {implicit: bool, properties: Properties.T} -> Markup.T
|
|
358b6020f8b6
generalized notion of active area, where sendback is just one application;
wenzelm
parents:
50215
diff
changeset
|
10 |
val markup_implicit: string -> string -> string |
|
358b6020f8b6
generalized notion of active area, where sendback is just one application;
wenzelm
parents:
50215
diff
changeset
|
11 |
val markup: string -> string -> string |
|
52697
6fb98a20c349
explicit padding on command boundary for "auto" generated sendback -- do not replace the corresponding goal command, but append to it;
wenzelm
parents:
50505
diff
changeset
|
12 |
val sendback_markup: Properties.T -> string -> string |
| 50498 | 13 |
val dialog: unit -> (string -> Markup.T) * string future |
|
50505
33c92722cc3d
smarter handling of tracing messages: prover process pauses and enters user dialog;
wenzelm
parents:
50504
diff
changeset
|
14 |
val dialog_text: unit -> (string -> string) * string future |
|
50500
c94bba7906d2
identify dialogs via official serial and maintain as result message;
wenzelm
parents:
50498
diff
changeset
|
15 |
val dialog_result: serial -> string -> unit |
|
50163
c62ce309dc26
more abstract Sendback operations, with explicit id/exec_id properties;
wenzelm
parents:
diff
changeset
|
16 |
end; |
|
c62ce309dc26
more abstract Sendback operations, with explicit id/exec_id properties;
wenzelm
parents:
diff
changeset
|
17 |
|
|
50450
358b6020f8b6
generalized notion of active area, where sendback is just one application;
wenzelm
parents:
50215
diff
changeset
|
18 |
structure Active: ACTIVE = |
|
50163
c62ce309dc26
more abstract Sendback operations, with explicit id/exec_id properties;
wenzelm
parents:
diff
changeset
|
19 |
struct |
|
c62ce309dc26
more abstract Sendback operations, with explicit id/exec_id properties;
wenzelm
parents:
diff
changeset
|
20 |
|
| 50498 | 21 |
(* active markup *) |
22 |
||
23 |
fun explicit_id () = |
|
24 |
(case Position.get_id (Position.thread_data ()) of |
|
25 |
SOME id => [(Markup.idN, id)] |
|
26 |
| NONE => []); |
|
27 |
||
|
50450
358b6020f8b6
generalized notion of active area, where sendback is just one application;
wenzelm
parents:
50215
diff
changeset
|
28 |
fun make_markup name {implicit, properties} =
|
|
358b6020f8b6
generalized notion of active area, where sendback is just one application;
wenzelm
parents:
50215
diff
changeset
|
29 |
(name, []) |
| 50498 | 30 |
|> not implicit ? (fn markup => Markup.properties (explicit_id ()) markup) |
| 50215 | 31 |
|> Markup.properties properties; |
|
50163
c62ce309dc26
more abstract Sendback operations, with explicit id/exec_id properties;
wenzelm
parents:
diff
changeset
|
32 |
|
|
50450
358b6020f8b6
generalized notion of active area, where sendback is just one application;
wenzelm
parents:
50215
diff
changeset
|
33 |
fun markup_implicit name s = Markup.markup (make_markup name {implicit = true, properties = []}) s;
|
|
358b6020f8b6
generalized notion of active area, where sendback is just one application;
wenzelm
parents:
50215
diff
changeset
|
34 |
fun markup name s = Markup.markup (make_markup name {implicit = false, properties = []}) s;
|
|
358b6020f8b6
generalized notion of active area, where sendback is just one application;
wenzelm
parents:
50215
diff
changeset
|
35 |
|
|
52697
6fb98a20c349
explicit padding on command boundary for "auto" generated sendback -- do not replace the corresponding goal command, but append to it;
wenzelm
parents:
50505
diff
changeset
|
36 |
fun sendback_markup props = |
|
6fb98a20c349
explicit padding on command boundary for "auto" generated sendback -- do not replace the corresponding goal command, but append to it;
wenzelm
parents:
50505
diff
changeset
|
37 |
Markup.markup (make_markup Markup.sendbackN {implicit = false, properties = props});
|
|
50164
77668b522ffe
some support for implicit senback, meaning that it uses the caret position instead of explicit command exec_id;
wenzelm
parents:
50163
diff
changeset
|
38 |
|
| 50498 | 39 |
|
40 |
(* dialog via document content *) |
|
41 |
||
|
50500
c94bba7906d2
identify dialogs via official serial and maintain as result message;
wenzelm
parents:
50498
diff
changeset
|
42 |
val dialogs = Synchronized.var "Active.dialogs" (Inttab.empty: string future Inttab.table); |
| 50498 | 43 |
|
44 |
fun dialog () = |
|
45 |
let |
|
|
50500
c94bba7906d2
identify dialogs via official serial and maintain as result message;
wenzelm
parents:
50498
diff
changeset
|
46 |
val i = serial (); |
|
c94bba7906d2
identify dialogs via official serial and maintain as result message;
wenzelm
parents:
50498
diff
changeset
|
47 |
fun abort () = Synchronized.change dialogs (Inttab.delete_safe i); |
| 50498 | 48 |
val promise = Future.promise abort : string future; |
|
50500
c94bba7906d2
identify dialogs via official serial and maintain as result message;
wenzelm
parents:
50498
diff
changeset
|
49 |
val _ = Synchronized.change dialogs (Inttab.update_new (i, promise)); |
| 50504 | 50 |
fun result_markup result = Markup.properties (explicit_id ()) (Markup.dialog i result); |
51 |
in (result_markup, promise) end; |
|
| 50498 | 52 |
|
|
50505
33c92722cc3d
smarter handling of tracing messages: prover process pauses and enters user dialog;
wenzelm
parents:
50504
diff
changeset
|
53 |
fun dialog_text () = |
|
33c92722cc3d
smarter handling of tracing messages: prover process pauses and enters user dialog;
wenzelm
parents:
50504
diff
changeset
|
54 |
let val (markup, promise) = dialog () |
|
33c92722cc3d
smarter handling of tracing messages: prover process pauses and enters user dialog;
wenzelm
parents:
50504
diff
changeset
|
55 |
in (fn s => Markup.markup (markup s) s, promise) end; |
|
33c92722cc3d
smarter handling of tracing messages: prover process pauses and enters user dialog;
wenzelm
parents:
50504
diff
changeset
|
56 |
|
|
50500
c94bba7906d2
identify dialogs via official serial and maintain as result message;
wenzelm
parents:
50498
diff
changeset
|
57 |
fun dialog_result i result = |
| 50498 | 58 |
Synchronized.change_result dialogs |
|
50500
c94bba7906d2
identify dialogs via official serial and maintain as result message;
wenzelm
parents:
50498
diff
changeset
|
59 |
(fn tab => (Inttab.lookup tab i, Inttab.delete_safe i tab)) |
| 50498 | 60 |
|> (fn NONE => () | SOME promise => Future.fulfill promise result); |
61 |
||
|
50163
c62ce309dc26
more abstract Sendback operations, with explicit id/exec_id properties;
wenzelm
parents:
diff
changeset
|
62 |
end; |
|
c62ce309dc26
more abstract Sendback operations, with explicit id/exec_id properties;
wenzelm
parents:
diff
changeset
|
63 |