src/Pure/Isar/outer_syntax.ML
changeset 51225 3fe0d8d55975
parent 50450 358b6020f8b6
child 51268 fcc4b89a600d
equal deleted inserted replaced
51224:c3e99efacb67 51225:3fe0d8d55975
    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;