1 (* Copyright (C) 2004, HELM Team.
3 * This file is part of HELM, an Hypertextual, Electronic
4 * Library of Mathematics, developed at the Computer Science
5 * Department, University of Bologna, Italy.
7 * HELM is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version 2
10 * of the License, or (at your option) any later version.
12 * HELM is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with HELM; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
22 * For details, see the HELM World-Wide-Web page,
23 * http://helm.cs.unibo.it/
26 exception NoWellTypedInterpretation
30 type t = Disambiguate_types.environment
32 let empty = Disambiguate_types.Environment.empty
35 prerr_endline "TODO: implement and move away" ;
36 Disambiguate_types.Environment.fold
39 | Disambiguate_types.Id id ->s ^ Printf.sprintf "alias %s %s\n" id (fst v)
43 let of_string inputtext =
45 let alfa = "[a-zA-Z_-]" in
46 let digit = "[0-9]" in
47 let ident = alfa ^ "\(" ^ alfa ^ "\|" ^ digit ^ "\)*" in
48 let blanks = "\( \|\t\|\n\)+" in
49 let nonblanks = "[^ \t\n]+" in
50 let uri = "/\(" ^ ident ^ "/\)*" ^ nonblanks in (* not very strict check *)
52 ("alias" ^ blanks ^ "\(" ^ ident ^ "\)" ^ blanks ^ "\(" ^ uri ^ "\)")
56 let n' = Str.search_forward regexpr inputtext n in
57 let id = Disambiguate_types.Id (Str.matched_group 2 inputtext) in
58 let uri = "cic:" ^ (Str.matched_group 5 inputtext) in
59 let resolve_id = aux (n' + 1) in
60 if Disambiguate_types.Environment.mem id resolve_id then
63 let term = Disambiguate.term_of_uri uri in
64 (Disambiguate_types.Environment.add id (uri, (fun _ _ _ -> term))
67 Not_found -> Disambiguate_types.Environment.empty
73 module Make (C : Disambiguate_types.Callbacks) =
75 let disambiguate_term mqi_handle context metasenv term_as_string environment =
76 let module Disambiguate' = Disambiguate.Make (C) in
77 let term = Parser.parse_term (Stream.of_string term_as_string) in
78 Disambiguate'.disambiguate_term
79 mqi_handle context metasenv term environment