author | wenzelm |
Wed, 28 Dec 2016 19:16:45 +0100 | |
changeset 64689 | f32efd2eeb2c |
parent 63518 | ae8fd6fe63a1 |
child 66166 | c88d1c36c9c3 |
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 |
63518 | 12 |
val sendback_markup_properties: Properties.T -> string -> string |
13 |
val sendback_markup_command: string -> string |
|
50498 | 14 |
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
|
15 |
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
|
16 |
val dialog_result: serial -> string -> unit |
50163
c62ce309dc26
more abstract Sendback operations, with explicit id/exec_id properties;
wenzelm
parents:
diff
changeset
|
17 |
end; |
c62ce309dc26
more abstract Sendback operations, with explicit id/exec_id properties;
wenzelm
parents:
diff
changeset
|
18 |
|
50450
358b6020f8b6
generalized notion of active area, where sendback is just one application;
wenzelm
parents:
50215
diff
changeset
|
19 |
structure Active: ACTIVE = |
50163
c62ce309dc26
more abstract Sendback operations, with explicit id/exec_id properties;
wenzelm
parents:
diff
changeset
|
20 |
struct |
c62ce309dc26
more abstract Sendback operations, with explicit id/exec_id properties;
wenzelm
parents:
diff
changeset
|
21 |
|
50498 | 22 |
(* active markup *) |
23 |
||
24 |
fun explicit_id () = |
|
25 |
(case Position.get_id (Position.thread_data ()) of |
|
26 |
SOME id => [(Markup.idN, id)] |
|
27 |
| NONE => []); |
|
28 |
||
50450
358b6020f8b6
generalized notion of active area, where sendback is just one application;
wenzelm
parents:
50215
diff
changeset
|
29 |
fun make_markup name {implicit, properties} = |
358b6020f8b6
generalized notion of active area, where sendback is just one application;
wenzelm
parents:
50215
diff
changeset
|
30 |
(name, []) |
50498 | 31 |
|> not implicit ? (fn markup => Markup.properties (explicit_id ()) markup) |
50215 | 32 |
|> Markup.properties properties; |
50163
c62ce309dc26
more abstract Sendback operations, with explicit id/exec_id properties;
wenzelm
parents:
diff
changeset
|
33 |
|
50450
358b6020f8b6
generalized notion of active area, where sendback is just one application;
wenzelm
parents:
50215
diff
changeset
|
34 |
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
|
35 |
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
|
36 |
|
63518 | 37 |
fun sendback_markup_properties props s = |
38 |
Markup.markup (make_markup Markup.sendbackN {implicit = false, properties = props}) s; |
|
39 |
||
40 |
fun sendback_markup_command s = |
|
41 |
sendback_markup_properties [Markup.padding_command] s; |
|
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
|
42 |
|
50498 | 43 |
|
44 |
(* dialog via document content *) |
|
45 |
||
50500
c94bba7906d2
identify dialogs via official serial and maintain as result message;
wenzelm
parents:
50498
diff
changeset
|
46 |
val dialogs = Synchronized.var "Active.dialogs" (Inttab.empty: string future Inttab.table); |
50498 | 47 |
|
48 |
fun dialog () = |
|
49 |
let |
|
50500
c94bba7906d2
identify dialogs via official serial and maintain as result message;
wenzelm
parents:
50498
diff
changeset
|
50 |
val i = serial (); |
c94bba7906d2
identify dialogs via official serial and maintain as result message;
wenzelm
parents:
50498
diff
changeset
|
51 |
fun abort () = Synchronized.change dialogs (Inttab.delete_safe i); |
50498 | 52 |
val promise = Future.promise abort : string future; |
50500
c94bba7906d2
identify dialogs via official serial and maintain as result message;
wenzelm
parents:
50498
diff
changeset
|
53 |
val _ = Synchronized.change dialogs (Inttab.update_new (i, promise)); |
50504 | 54 |
fun result_markup result = Markup.properties (explicit_id ()) (Markup.dialog i result); |
55 |
in (result_markup, promise) end; |
|
50498 | 56 |
|
50505
33c92722cc3d
smarter handling of tracing messages: prover process pauses and enters user dialog;
wenzelm
parents:
50504
diff
changeset
|
57 |
fun dialog_text () = |
33c92722cc3d
smarter handling of tracing messages: prover process pauses and enters user dialog;
wenzelm
parents:
50504
diff
changeset
|
58 |
let val (markup, promise) = dialog () |
33c92722cc3d
smarter handling of tracing messages: prover process pauses and enters user dialog;
wenzelm
parents:
50504
diff
changeset
|
59 |
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
|
60 |
|
50500
c94bba7906d2
identify dialogs via official serial and maintain as result message;
wenzelm
parents:
50498
diff
changeset
|
61 |
fun dialog_result i result = |
50498 | 62 |
Synchronized.change_result dialogs |
50500
c94bba7906d2
identify dialogs via official serial and maintain as result message;
wenzelm
parents:
50498
diff
changeset
|
63 |
(fn tab => (Inttab.lookup tab i, Inttab.delete_safe i tab)) |
50498 | 64 |
|> (fn NONE => () | SOME promise => Future.fulfill promise result); |
65 |
||
50163
c62ce309dc26
more abstract Sendback operations, with explicit id/exec_id properties;
wenzelm
parents:
diff
changeset
|
66 |
end; |
c62ce309dc26
more abstract Sendback operations, with explicit id/exec_id properties;
wenzelm
parents:
diff
changeset
|
67 |