| author | wenzelm | 
| Fri, 25 Apr 2014 12:51:08 +0200 | |
| changeset 56715 | 52125652e82a | 
| 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: 
50215diff
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: 
50215diff
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: 
50215diff
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: 
50215diff
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: 
50215diff
changeset | 10 | val markup_implicit: string -> string -> string | 
| 
358b6020f8b6
generalized notion of active area, where sendback is just one application;
 wenzelm parents: 
50215diff
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: 
50505diff
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: 
50504diff
changeset | 14 | val dialog_text: unit -> (string -> string) * string future | 
| 50500 
c94bba7906d2
identify dialogs via official serial and maintain as result message;
 wenzelm parents: 
50498diff
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: 
50215diff
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: 
50215diff
changeset | 28 | fun make_markup name {implicit, properties} =
 | 
| 
358b6020f8b6
generalized notion of active area, where sendback is just one application;
 wenzelm parents: 
50215diff
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: 
50215diff
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: 
50215diff
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: 
50215diff
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: 
50505diff
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: 
50505diff
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: 
50163diff
changeset | 38 | |
| 50498 | 39 | |
| 40 | (* dialog via document content *) | |
| 41 | ||
| 50500 
c94bba7906d2
identify dialogs via official serial and maintain as result message;
 wenzelm parents: 
50498diff
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: 
50498diff
changeset | 46 | val i = serial (); | 
| 
c94bba7906d2
identify dialogs via official serial and maintain as result message;
 wenzelm parents: 
50498diff
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: 
50498diff
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: 
50504diff
changeset | 53 | fun dialog_text () = | 
| 
33c92722cc3d
smarter handling of tracing messages: prover process pauses and enters user dialog;
 wenzelm parents: 
50504diff
changeset | 54 | let val (markup, promise) = dialog () | 
| 
33c92722cc3d
smarter handling of tracing messages: prover process pauses and enters user dialog;
 wenzelm parents: 
50504diff
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: 
50504diff
changeset | 56 | |
| 50500 
c94bba7906d2
identify dialogs via official serial and maintain as result message;
 wenzelm parents: 
50498diff
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: 
50498diff
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 |