82 val setup: binding -> (Proof.context -> method) context_parser -> string -> theory -> theory |
82 val setup: binding -> (Proof.context -> method) context_parser -> string -> theory -> theory |
83 val method_setup: bstring -> string * Position.T -> string -> theory -> theory |
83 val method_setup: bstring -> string * Position.T -> string -> theory -> theory |
84 val simple_args: 'a parser -> ('a -> Proof.context -> method) -> src -> Proof.context -> method |
84 val simple_args: 'a parser -> ('a -> Proof.context -> method) -> src -> Proof.context -> method |
85 val ctxt_args: (Proof.context -> method) -> src -> Proof.context -> method |
85 val ctxt_args: (Proof.context -> method) -> src -> Proof.context -> method |
86 val no_args: method -> src -> Proof.context -> method |
86 val no_args: method -> src -> Proof.context -> method |
87 type modifier |
87 type modifier = (Proof.context -> Proof.context) * attribute |
|
88 val section: modifier parser list -> thm list context_parser |
|
89 val sections: modifier parser list -> thm list list context_parser |
88 val sectioned_args: 'a context_parser -> modifier parser list -> |
90 val sectioned_args: 'a context_parser -> modifier parser list -> |
89 ('a -> Proof.context -> 'b) -> src -> Proof.context -> 'b |
91 ('a -> Proof.context -> 'b) -> src -> Proof.context -> 'b |
90 val bang_sectioned_args: modifier parser list -> |
92 val bang_sectioned_args: modifier parser list -> |
91 (thm list -> Proof.context -> 'a) -> src -> Proof.context -> 'a |
93 (thm list -> Proof.context -> 'a) -> src -> Proof.context -> 'a |
92 val bang_sectioned_args': modifier parser list -> 'a context_parser -> |
94 val bang_sectioned_args': modifier parser list -> 'a context_parser -> |
431 local |
433 local |
432 |
434 |
433 fun thms ss = Scan.repeat (Scan.unless (Scan.lift (Scan.first ss)) Attrib.multi_thm) >> flat; |
435 fun thms ss = Scan.repeat (Scan.unless (Scan.lift (Scan.first ss)) Attrib.multi_thm) >> flat; |
434 fun app (f, att) (context, ths) = Library.foldl_map att (Context.map_proof f context, ths); |
436 fun app (f, att) (context, ths) = Library.foldl_map att (Context.map_proof f context, ths); |
435 |
437 |
|
438 in |
|
439 |
436 fun section ss = Scan.depend (fn context => (Scan.first ss -- Scan.pass context (thms ss)) :|-- |
440 fun section ss = Scan.depend (fn context => (Scan.first ss -- Scan.pass context (thms ss)) :|-- |
437 (fn (m, ths) => Scan.succeed (app m (context, ths)))); |
441 (fn (m, ths) => Scan.succeed (app m (context, ths)))); |
438 |
442 |
439 fun sectioned args ss = args -- Scan.repeat (section ss); |
443 fun sections ss = Scan.repeat (section ss); |
440 |
|
441 in |
|
442 |
444 |
443 fun sectioned_args args ss f src ctxt = |
445 fun sectioned_args args ss f src ctxt = |
444 let val ((x, _), ctxt') = syntax (sectioned args ss) src ctxt |
446 let val ((x, _), ctxt') = syntax (args -- sections ss) src ctxt |
445 in f x ctxt' end; |
447 in f x ctxt' end; |
446 |
448 |
447 fun bang_sectioned_args ss f = sectioned_args Args.bang_facts ss f; |
449 fun bang_sectioned_args ss f = sectioned_args Args.bang_facts ss f; |
448 fun bang_sectioned_args' ss scan f = |
450 fun bang_sectioned_args' ss scan f = |
449 sectioned_args (Args.bang_facts -- scan >> swap) ss (uncurry f); |
451 sectioned_args (Args.bang_facts -- scan >> swap) ss (uncurry f); |