- let stms =
- try
- CicTextualParser2.parse_statements (Stream.of_channel ic)
- with
- (CicTextualParser2.Parse_error _) as exc ->
- prerr_endline ("Unable to parse: " ^ file);
- prerr_endline (MatitaExcPp.to_string exc);
- exit 1
- in
- close_in ic;
- List.iter
- (function
- | TA.Executable (_, TA.Command (_, TA.Set (_, "baseuri", uri))) ->
- let uri = MatitaMisc.strip_trailing_slash uri in
- baseuri := (uri, file) :: !baseuri
- | TA.Executable (_, TA.Command
- (_, TA.Alias (_, TA.Ident_alias(_, uri)))) ->
- Hashtbl.add aliases file uri
- | _ -> ())
- stms;
+ let istream = Stream.of_channel ic in
+ let notation_ids = ref [] in
+ (try
+ while true do
+ try
+ let stm = GrafiteParser.parse_statement istream in
+ (match stm with
+ | GA.Executable (_, GA.Command (_, notation)) ->
+ let stm, ids = CicNotation.process_notation notation in
+ notation_ids := ids @ !notation_ids
+ | _ -> ());
+ match stm with
+ | GA.Executable (_, GA.Command (_, GA.Set (_, "baseuri", uri))) ->
+ let uri = MatitaMisc.strip_trailing_slash uri in
+ baseuris := uri :: !baseuris
+ | GA.Executable (_, GA.Command
+ (_, GA.Alias (_, GA.Ident_alias(_, uri)))) ->
+ Hashtbl.add aliases file uri
+ | GA.Executable (_, GA.Command (_, GA.Include (_, path))) ->
+ (* maybe to process coq.ma is useles since it contains only
+ * interpretations... no idea if notations will be added later *)
+ let moo_file =
+ MatitaMisc.obj_file_of_script (
+ if path <> "coq.ma" then find path else path)
+ in
+ let ids = process_notation_of_file moo_file in
+ notation_ids := ids @ !notation_ids;
+ (try
+ Hashtbl.add deps file moo_file
+ with
+ Sys_error _ ->
+ MatitaLog.error
+ ("In file " ^ file ^ " unable to include " ^ path)
+ )
+ | _ -> ()
+ with
+ CicNotationParser.Parse_error _ as exn ->
+ prerr_endline ("Unable to parse: " ^ file);
+ prerr_endline (MatitaExcPp.to_string exn);
+ ()
+ done
+ with
+ | End_of_file -> close_in ic);