34 val parse: Position.T -> string -> Toplevel.transition list |
34 val parse: Position.T -> string -> Toplevel.transition list |
35 type isar |
35 type isar |
36 val isar: TextIO.instream -> bool -> isar |
36 val isar: TextIO.instream -> bool -> isar |
37 val span_cmts: Token.T list -> Token.T list |
37 val span_cmts: Token.T list -> Token.T list |
38 val read_span: outer_syntax -> Token.T list -> Toplevel.transition * bool |
38 val read_span: outer_syntax -> Token.T list -> Toplevel.transition * bool |
39 val read_element: outer_syntax -> (unit -> theory) -> Thy_Syntax.element -> |
39 val read_element: outer_syntax -> (unit -> theory) -> Thy_Syntax.span Thy_Syntax.element -> |
40 (Toplevel.transition * Toplevel.transition list) list |
40 (Toplevel.transition * Toplevel.transition list) list |
41 end; |
41 end; |
42 |
42 |
43 structure Outer_Syntax: OUTER_SYNTAX = |
43 structure Outer_Syntax: OUTER_SYNTAX = |
44 struct |
44 struct |
329 | [] => (Toplevel.ignored (Position.set_range (Command.range toks)), false) |
329 | [] => (Toplevel.ignored (Position.set_range (Command.range toks)), false) |
330 | _ => (Toplevel.malformed proper_range "Exactly one command expected", true)) |
330 | _ => (Toplevel.malformed proper_range "Exactly one command expected", true)) |
331 handle ERROR msg => (Toplevel.malformed proper_range msg, true) |
331 handle ERROR msg => (Toplevel.malformed proper_range msg, true) |
332 end; |
332 end; |
333 |
333 |
334 fun read_element outer_syntax init {head, proof, proper_proof} = |
334 fun read_element outer_syntax init (Thy_Syntax.Element (head, opt_proof)) = |
335 let |
335 let |
336 val read = read_span outer_syntax o Thy_Syntax.span_content; |
336 val read = read_span outer_syntax o Thy_Syntax.span_content; |
337 val (tr, proper_head) = read head |>> Toplevel.modify_init init; |
337 val (tr, proper_head) = read head |>> Toplevel.modify_init init; |
338 val proof_trs = map read proof |> filter #2 |> map #1; |
338 val proof_trs = |
339 in |
339 (case opt_proof of |
340 if proper_head andalso proper_proof andalso |
340 NONE => [] |
|
341 | SOME (a, b) => map read (maps Thy_Syntax.flat_element a @ [b]) |> filter #2 |> map #1); |
|
342 in |
|
343 if proper_head andalso |
341 not (Keyword.is_schematic_goal (Toplevel.name_of tr)) then [(tr, proof_trs)] |
344 not (Keyword.is_schematic_goal (Toplevel.name_of tr)) then [(tr, proof_trs)] |
342 else map (rpair []) (if proper_head then tr :: proof_trs else proof_trs) |
345 else map (rpair []) (if proper_head then tr :: proof_trs else proof_trs) |
343 end; |
346 end; |
344 |
347 |
345 end; |
348 end; |