src/Pure/PIDE/resources.ML
changeset 58928 23d0ffd48006
parent 58923 cb9b69cca999
child 58934 385a4cc7426f
equal deleted inserted replaced
58927:cf47382db395 58928:23d0ffd48006
    80 fun parse_files cmd =
    80 fun parse_files cmd =
    81   Scan.ahead Parse.not_eof -- Parse.path >> (fn (tok, name) => fn thy =>
    81   Scan.ahead Parse.not_eof -- Parse.path >> (fn (tok, name) => fn thy =>
    82     (case Token.get_files tok of
    82     (case Token.get_files tok of
    83       [] =>
    83       [] =>
    84         let
    84         let
    85           val keywords = Keyword.get_keywords ();
    85           val keywords = Thy_Header.get_keywords thy;
    86           val master_dir = master_directory thy;
    86           val master_dir = master_directory thy;
    87           val pos = Token.pos_of tok;
    87           val pos = Token.pos_of tok;
    88           val src_paths = Keyword.command_files keywords cmd (Path.explode name);
    88           val src_paths = Keyword.command_files keywords cmd (Path.explode name);
    89         in map (Command.read_file master_dir pos) src_paths end
    89         in map (Command.read_file master_dir pos) src_paths end
    90     | files => map Exn.release files));
    90     | files => map Exn.release files));
   120 (* load theory *)
   120 (* load theory *)
   121 
   121 
   122 fun begin_theory master_dir {name, imports, keywords} parents =
   122 fun begin_theory master_dir {name, imports, keywords} parents =
   123   Theory.begin_theory name parents
   123   Theory.begin_theory name parents
   124   |> put_deps master_dir imports
   124   |> put_deps master_dir imports
   125   |> fold Thy_Header.declare_keyword keywords;
   125   |> Thy_Header.add_keywords keywords;
   126 
   126 
   127 fun excursion keywords master_dir last_timing init elements =
   127 fun excursion keywords master_dir last_timing init elements =
   128   let
   128   let
   129     fun prepare_span span =
   129     fun prepare_span st span =
   130       Command_Span.content span
   130       Command_Span.content span
   131       |> Command.read keywords master_dir init []
   131       |> Command.read (Command.read_thy st) master_dir init []
   132       |> (fn tr => Toplevel.put_timing (last_timing tr) tr);
   132       |> (fn tr => Toplevel.put_timing (last_timing tr) tr);
   133 
   133 
   134     fun element_result span_elem (st, _) =
   134     fun element_result span_elem (st, _) =
   135       let
   135       let
   136         val elem = Thy_Syntax.map_element prepare_span span_elem;
   136         val elem = Thy_Syntax.map_element (prepare_span st) span_elem;
   137         val (results, st') = Toplevel.element_result keywords elem st;
   137         val (results, st') = Toplevel.element_result keywords elem st;
   138         val pos' = Toplevel.pos_of (Thy_Syntax.last_element elem);
   138         val pos' = Toplevel.pos_of (Thy_Syntax.last_element elem);
   139       in (results, (st', pos')) end;
   139       in (results, (st', pos')) end;
   140 
   140 
   141     val (results, (end_state, end_pos)) =
   141     val (results, (end_state, end_pos)) =
   145   in (results, thy) end;
   145   in (results, thy) end;
   146 
   146 
   147 fun load_thy document last_timing update_time master_dir header text_pos text parents =
   147 fun load_thy document last_timing update_time master_dir header text_pos text parents =
   148   let
   148   let
   149     val (name, _) = #name header;
   149     val (name, _) = #name header;
   150     val _ = Thy_Header.define_keywords (#keywords header);
   150     val keywords =
   151     val keywords = Keyword.get_keywords ();
   151       fold (curry Keyword.merge_keywords o Thy_Header.get_keywords) parents
       
   152         (Keyword.add_keywords (#keywords header) Keyword.empty_keywords);
   152 
   153 
   153     val toks = Outer_Syntax.scan keywords text_pos text;
   154     val toks = Outer_Syntax.scan keywords text_pos text;
   154     val spans = Outer_Syntax.parse_spans toks;
   155     val spans = Outer_Syntax.parse_spans toks;
   155     val elements = Thy_Syntax.parse_elements keywords spans;
   156     val elements = Thy_Syntax.parse_elements keywords spans;
   156 
   157 
   164         (fn () => excursion keywords master_dir last_timing init elements);
   165         (fn () => excursion keywords master_dir last_timing init elements);
   165 
   166 
   166     fun present () =
   167     fun present () =
   167       let
   168       let
   168         val res = filter_out (Toplevel.is_ignored o #1) (maps Toplevel.join_results results);
   169         val res = filter_out (Toplevel.is_ignored o #1) (maps Toplevel.join_results results);
   169         val (keywords, syntax) = Outer_Syntax.get_syntax ();
       
   170       in
   170       in
   171         if exists (Toplevel.is_skipped_proof o #2) res then
   171         if exists (Toplevel.is_skipped_proof o #2) res then
   172           warning ("Cannot present theory with skipped proofs: " ^ quote name)
   172           warning ("Cannot present theory with skipped proofs: " ^ quote name)
   173         else
   173         else
   174           let val tex_source =
   174           let val tex_source = Thy_Output.present_thy thy res toks |> Buffer.content;
   175             Thy_Output.present_thy keywords (Outer_Syntax.is_markup syntax) res toks
       
   176             |> Buffer.content;
       
   177           in if document then Present.theory_output name tex_source else () end
   175           in if document then Present.theory_output name tex_source else () end
   178       end;
   176       end;
   179 
   177 
   180   in (thy, present, size text) end;
   178   in (thy, present, size text) end;
   181 
   179