src/Pure/PIDE/resources.ML
changeset 72756 72ac27ea12b2
parent 72754 1456c5747416
child 72758 9d0951e24e61
equal deleted inserted replaced
72755:8dffbe01a3e1 72756:72ac27ea12b2
    12      session_directories: (string * string) list,
    12      session_directories: (string * string) list,
    13      session_chapters: (string * string) list,
    13      session_chapters: (string * string) list,
    14      bibtex_entries: (string * string list) list,
    14      bibtex_entries: (string * string list) list,
    15      command_timings: Properties.T list,
    15      command_timings: Properties.T list,
    16      docs: string list,
    16      docs: string list,
       
    17      scala_functions: (string * Position.T) list,
    17      global_theories: (string * string) list,
    18      global_theories: (string * string) list,
    18      loaded_theories: string list} -> unit
    19      loaded_theories: string list} -> unit
    19   val init_session_yxml: string -> unit
    20   val init_session_yxml: string -> unit
    20   val init_session_file: Path.T -> unit
    21   val init_session_file: Path.T -> unit
    21   val finish_session_base: unit -> unit
    22   val finish_session_base: unit -> unit
    23   val loaded_theory: string -> bool
    24   val loaded_theory: string -> bool
    24   val check_session: Proof.context -> string * Position.T -> string
    25   val check_session: Proof.context -> string * Position.T -> string
    25   val session_chapter: string -> string
    26   val session_chapter: string -> string
    26   val last_timing: Toplevel.transition -> Time.time
    27   val last_timing: Toplevel.transition -> Time.time
    27   val check_doc: Proof.context -> string * Position.T -> string
    28   val check_doc: Proof.context -> string * Position.T -> string
       
    29   val scala_function_pos: string -> Position.T
    28   val master_directory: theory -> Path.T
    30   val master_directory: theory -> Path.T
    29   val imports_of: theory -> (string * Position.T) list
    31   val imports_of: theory -> (string * Position.T) list
    30   val begin_theory: Path.T -> Thy_Header.header -> theory list -> theory
    32   val begin_theory: Path.T -> Thy_Header.header -> theory list -> theory
    31   val thy_path: Path.T -> Path.T
    33   val thy_path: Path.T -> Path.T
    32   val theory_qualifier: string -> string
    34   val theory_qualifier: string -> string
   101    session_directories = Symtab.empty: Path.T list Symtab.table,
   103    session_directories = Symtab.empty: Path.T list Symtab.table,
   102    session_chapters = Symtab.empty: string Symtab.table,
   104    session_chapters = Symtab.empty: string Symtab.table,
   103    bibtex_entries = Symtab.empty: string list Symtab.table,
   105    bibtex_entries = Symtab.empty: string list Symtab.table,
   104    timings = empty_timings,
   106    timings = empty_timings,
   105    docs = []: (string * entry) list,
   107    docs = []: (string * entry) list,
       
   108    scala_functions = Symtab.empty: Position.T Symtab.table,
   106    global_theories = Symtab.empty: string Symtab.table,
   109    global_theories = Symtab.empty: string Symtab.table,
   107    loaded_theories = Symtab.empty: unit Symtab.table};
   110    loaded_theories = Symtab.empty: unit Symtab.table};
   108 
   111 
   109 val global_session_base =
   112 val global_session_base =
   110   Synchronized.var "Sessions.base" empty_session_base;
   113   Synchronized.var "Sessions.base" empty_session_base;
   111 
   114 
   112 fun init_session
   115 fun init_session
   113     {session_positions, session_directories, session_chapters,
   116     {session_positions, session_directories, session_chapters, bibtex_entries,
   114       bibtex_entries, command_timings, docs, global_theories, loaded_theories} =
   117       command_timings, docs, scala_functions, global_theories, loaded_theories} =
   115   Synchronized.change global_session_base
   118   Synchronized.change global_session_base
   116     (fn _ =>
   119     (fn _ =>
   117       {session_positions = sort_by #1 (map (apsnd make_entry) session_positions),
   120       {session_positions = sort_by #1 (map (apsnd make_entry) session_positions),
   118        session_directories =
   121        session_directories =
   119          fold_rev (fn (dir, name) => Symtab.cons_list (name, Path.explode dir))
   122          fold_rev (fn (dir, name) => Symtab.cons_list (name, Path.explode dir))
   120            session_directories Symtab.empty,
   123            session_directories Symtab.empty,
   121        session_chapters = Symtab.make session_chapters,
   124        session_chapters = Symtab.make session_chapters,
   122        bibtex_entries = Symtab.make bibtex_entries,
   125        bibtex_entries = Symtab.make bibtex_entries,
   123        timings = make_timings command_timings,
   126        timings = make_timings command_timings,
   124        docs = sort_by #1 (map (apsnd make_entry o rpair []) docs),
   127        docs = sort_by #1 (map (apsnd make_entry o rpair []) docs),
       
   128        scala_functions = Symtab.make scala_functions,
   125        global_theories = Symtab.make global_theories,
   129        global_theories = Symtab.make global_theories,
   126        loaded_theories = Symtab.make_set loaded_theories});
   130        loaded_theories = Symtab.make_set loaded_theories});
   127 
   131 
   128 fun init_session_yxml yxml =
   132 fun init_session_yxml yxml =
   129   let
   133   let
   130     val (session_positions, (session_directories, (session_chapters,
   134     val (session_positions, (session_directories, (session_chapters, (bibtex_entries,
   131           (bibtex_entries, (command_timings, (docs, (global_theories, loaded_theories))))))) =
   135         (command_timings, (docs, (scala_functions, (global_theories, loaded_theories)))))))) =
   132       YXML.parse_body yxml |>
   136       YXML.parse_body yxml |>
   133         let open XML.Decode in
   137         let open XML.Decode in
   134           (pair (list (pair string properties))
   138           (pair (list (pair string properties))
   135             (pair (list (pair string string)) (pair (list (pair string string))
   139             (pair (list (pair string string)) (pair (list (pair string string))
   136               (pair (list (pair string (list string))) (pair (list properties)
   140               (pair (list (pair string (list string))) (pair (list properties)
   137                 (pair (list string) (pair (list (pair string string)) (list string))))))))
   141                 (pair (list string)
       
   142                   (pair (list (pair string properties))
       
   143                     (pair (list (pair string string)) (list string)))))))))
   138         end;
   144         end;
   139   in
   145   in
   140     init_session
   146     init_session
   141       {session_positions = session_positions,
   147       {session_positions = session_positions,
   142        session_directories = session_directories,
   148        session_directories = session_directories,
   143        session_chapters = session_chapters,
   149        session_chapters = session_chapters,
   144        bibtex_entries = bibtex_entries,
   150        bibtex_entries = bibtex_entries,
   145        command_timings = command_timings,
   151        command_timings = command_timings,
   146        docs = docs,
   152        docs = docs,
       
   153        scala_functions = map (apsnd Position.of_properties) scala_functions,
   147        global_theories = global_theories,
   154        global_theories = global_theories,
   148        loaded_theories = loaded_theories}
   155        loaded_theories = loaded_theories}
   149   end;
   156   end;
   150 
   157 
   151 fun init_session_file path =
   158 fun init_session_file path =
   158        session_directories = Symtab.empty,
   165        session_directories = Symtab.empty,
   159        session_chapters = Symtab.empty,
   166        session_chapters = Symtab.empty,
   160        bibtex_entries = Symtab.empty,
   167        bibtex_entries = Symtab.empty,
   161        timings = empty_timings,
   168        timings = empty_timings,
   162        docs = [],
   169        docs = [],
       
   170        scala_functions = Symtab.empty,
   163        global_theories = global_theories,
   171        global_theories = global_theories,
   164        loaded_theories = loaded_theories});
   172        loaded_theories = loaded_theories});
   165 
   173 
   166 fun get_session_base f = f (Synchronized.value global_session_base);
   174 fun get_session_base f = f (Synchronized.value global_session_base);
   167 
   175 
   181   the_default "Unsorted" (Symtab.lookup (get_session_base #session_chapters) name);
   189   the_default "Unsorted" (Symtab.lookup (get_session_base #session_chapters) name);
   182 
   190 
   183 fun last_timing tr = get_timings (get_session_base #timings) tr;
   191 fun last_timing tr = get_timings (get_session_base #timings) tr;
   184 
   192 
   185 val check_doc = check_name #docs "documentation" (Markup.doc o #1);
   193 val check_doc = check_name #docs "documentation" (Markup.doc o #1);
       
   194 
       
   195 fun scala_function_pos name =
       
   196   Symtab.lookup (get_session_base #scala_functions) name
       
   197   |> the_default Position.none;
   186 
   198 
   187 
   199 
   188 (* manage source files *)
   200 (* manage source files *)
   189 
   201 
   190 type files =
   202 type files =