forked from Isabelle_DOF/Isabelle_DOF
Merge branch 'master' of logicalhacking.com:HOL-OCL/Isabelle_DOF
This commit is contained in:
commit
347595067f
91
Isa_DOF.thy
91
Isa_DOF.thy
|
@ -378,7 +378,8 @@ fun writeln_docrefs ctxt = let val {tab,...} = fst(get_data ctxt)
|
||||||
end (* struct *)
|
end (* struct *)
|
||||||
*}
|
*}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
section{* Syntax for Annotated Documentation Commands (the '' View'' Part I) *}
|
section{* Syntax for Annotated Documentation Commands (the '' View'' Part I) *}
|
||||||
|
|
||||||
ML{*
|
ML{*
|
||||||
|
@ -416,6 +417,10 @@ val attributes_upd =
|
||||||
|
|
||||||
val SPY = Unsynchronized.ref ([]:((term * Position.T) * term) list)
|
val SPY = Unsynchronized.ref ([]:((term * Position.T) * term) list)
|
||||||
|
|
||||||
|
val SPY2 = Unsynchronized.ref ([]:Symbol_Pos.T list);
|
||||||
|
|
||||||
|
val SPY3 = Unsynchronized.ref ("");
|
||||||
|
|
||||||
fun convert((Const(s,ty),_), t) X = Const(s^"_update", dummyT)
|
fun convert((Const(s,ty),_), t) X = Const(s^"_update", dummyT)
|
||||||
$ Abs("uuu_", type_of t, t) $ X
|
$ Abs("uuu_", type_of t, t) $ X
|
||||||
|convert _ _ = error("Left-hand side not a doc_class attribute.")
|
|convert _ _ = error("Left-hand side not a doc_class attribute.")
|
||||||
|
@ -458,7 +463,8 @@ fun enriched_document_command markdown (((((oid,pos),cid_pos),
|
||||||
((Syntax.read_term_global thy lhs |> generalize_term,pos),
|
((Syntax.read_term_global thy lhs |> generalize_term,pos),
|
||||||
Syntax.read_term_global thy rhs |> generalize_term)
|
Syntax.read_term_global thy rhs |> generalize_term)
|
||||||
val assns = map read_assn doc_attrs
|
val assns = map read_assn doc_attrs
|
||||||
val _ = (SPY:=assns)
|
val _ = (SPY:=assns)
|
||||||
|
val _ = (SPY2 := Input.source_explode toks)
|
||||||
val defaults = base (* this calculation ignores the defaults *)
|
val defaults = base (* this calculation ignores the defaults *)
|
||||||
val value_term = (fold convert assns defaults) |> (infer_type thy)
|
val value_term = (fold convert assns defaults) |> (infer_type thy)
|
||||||
val name = Context.theory_name thy
|
val name = Context.theory_name thy
|
||||||
|
@ -468,7 +474,8 @@ fun enriched_document_command markdown (((((oid,pos),cid_pos),
|
||||||
id=id,
|
id=id,
|
||||||
cid=cid_long})
|
cid=cid_long})
|
||||||
end
|
end
|
||||||
fun check_text thy = (Thy_Output.output_text(Toplevel.theory_toplevel thy) markdown toks; thy)
|
fun check_text thy = ( let val _ = (SPY3 := Thy_Output.output_text(Toplevel.theory_toplevel thy) markdown toks)
|
||||||
|
in thy end)
|
||||||
in
|
in
|
||||||
Toplevel.theory(enrich_trans #> check_text)
|
Toplevel.theory(enrich_trans #> check_text)
|
||||||
(* Thanks Frederic Tuong! ! ! *)
|
(* Thanks Frederic Tuong! ! ! *)
|
||||||
|
@ -596,6 +603,84 @@ end (* struct *)
|
||||||
|
|
||||||
*}
|
*}
|
||||||
|
|
||||||
|
(* experiments >>> *)
|
||||||
|
text{* fghfgh *}
|
||||||
|
|
||||||
|
text*[sdf] {* f @{thm refl}*}
|
||||||
|
ML{* AnnoTextelemParser.SPY2;
|
||||||
|
(* conclusion: Input.source_explode converts " f @{thm refl}"
|
||||||
|
into:
|
||||||
|
[(" ", {offset=14, id=-2769}), ("f", {offset=15, id=-2769}), (" ", {offset=16, id=-2769}),
|
||||||
|
("@", {offset=17, id=-2769}), ("{", {offset=18, id=-2769}), ("t", {offset=19, id=-2769}),
|
||||||
|
("h", {offset=20, id=-2769}), ("m", {offset=21, id=-2769}), (" ", {offset=22, id=-2769}),
|
||||||
|
("r", {offset=23, id=-2769}), ("e", {offset=24, id=-2769}), ("f", {offset=25, id=-2769}),
|
||||||
|
("l", {offset=26, id=-2769}), ("}", {offset=27, id=-2769})]
|
||||||
|
*)*}
|
||||||
|
|
||||||
|
text*[sdfg] {* fg @{thm refl}*}
|
||||||
|
ML{* AnnoTextelemParser.SPY3; *}
|
||||||
|
|
||||||
|
ML{*
|
||||||
|
(* text is :
|
||||||
|
|
||||||
|
val _ =
|
||||||
|
Outer_Syntax.command ("text", @{here}) "formal comment (primary style)"
|
||||||
|
(Parse.opt_target -- Parse.document_source >> Thy_Output.document_command {markdown = true});
|
||||||
|
|
||||||
|
*)
|
||||||
|
(* registrierung *)
|
||||||
|
Outer_Syntax.command : Outer_Syntax.command_keyword -> string
|
||||||
|
-> (Toplevel.transition -> Toplevel.transition) parser -> unit;
|
||||||
|
|
||||||
|
(* Isar Toplevel Steuerung *)
|
||||||
|
Toplevel.keep : (Toplevel.state -> unit) -> Toplevel.transition -> Toplevel.transition;
|
||||||
|
(* val keep' = add_trans o Keep;
|
||||||
|
fun keep f = add_trans (Keep (fn _ => f));
|
||||||
|
*)
|
||||||
|
|
||||||
|
Toplevel.present_local_theory : (xstring * Position.T) option -> (Toplevel.state -> unit) ->
|
||||||
|
Toplevel.transition -> Toplevel.transition;
|
||||||
|
(* fun present_local_theory target = present_transaction (fn int =>
|
||||||
|
(fn Theory (gthy, _) =>
|
||||||
|
let val (finish, lthy) = Named_Target.switch target gthy;
|
||||||
|
in Theory (finish lthy, SOME lthy) end
|
||||||
|
| _ => raise UNDEF));
|
||||||
|
|
||||||
|
fun present_transaction f g = add_trans (Transaction (f, g));
|
||||||
|
fun transaction f = present_transaction f (K ());
|
||||||
|
*)
|
||||||
|
|
||||||
|
Toplevel.theory : (theory -> theory) -> Toplevel.transition -> Toplevel.transition;
|
||||||
|
(* fun theory' f = transaction (fn int =>
|
||||||
|
(fn Theory (Context.Theory thy, _) =>
|
||||||
|
let val thy' = thy
|
||||||
|
|> Sign.new_group
|
||||||
|
|> f int
|
||||||
|
|> Sign.reset_group;
|
||||||
|
in Theory (Context.Theory thy', NONE) end
|
||||||
|
| _ => raise UNDEF));
|
||||||
|
|
||||||
|
fun theory f = theory' (K f); *)
|
||||||
|
|
||||||
|
Thy_Output.document_command : {markdown: bool} -> (xstring * Position.T) option * Input.source ->
|
||||||
|
Toplevel.transition -> Toplevel.transition;
|
||||||
|
(* fun document_command markdown (loc, txt) =
|
||||||
|
Toplevel.keep (fn state =>
|
||||||
|
(case loc of
|
||||||
|
NONE => ignore (output_text state markdown txt)
|
||||||
|
| SOME (_, pos) =>
|
||||||
|
error ("Illegal target specification -- not a theory context" ^ Position.here pos))) o
|
||||||
|
Toplevel.present_local_theory loc (fn state => ignore (output_text state markdown txt));
|
||||||
|
|
||||||
|
*)
|
||||||
|
|
||||||
|
Thy_Output.output_text : Toplevel.state -> {markdown: bool} -> Input.source -> string ;
|
||||||
|
(* this is where antiquotation expansion happens : uses eval_antiquote *)
|
||||||
|
|
||||||
|
|
||||||
|
*}
|
||||||
|
|
||||||
|
(* <<< experiments *)
|
||||||
|
|
||||||
section{* Syntax for Ontological Antiquotations (the '' View'' Part II) *}
|
section{* Syntax for Ontological Antiquotations (the '' View'' Part II) *}
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,7 @@ where the author of the exam is not expected to be physically present.
|
||||||
datatype ContentClass =
|
datatype ContentClass =
|
||||||
setter -- \<open>the 'author' of the exam\<close>
|
setter -- \<open>the 'author' of the exam\<close>
|
||||||
| checker -- \<open>the 'proof-reader' of the exam\<close>
|
| checker -- \<open>the 'proof-reader' of the exam\<close>
|
||||||
| external_examiner -- \<open>the 'proof-reader' of the exam\<close>
|
| external_examiner -- \<open>an external 'proof-reader' of the exam\<close>
|
||||||
| student -- \<open>the victim ;-) ... \<close>
|
| student -- \<open>the victim ;-) ... \<close>
|
||||||
|
|
||||||
|
|
||||||
|
|
Reference in New Issue