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/
28 exception Failure of string
29 let fail msg = raise (Failure msg)
31 let constants_only ~prefix =
36 (fun uri -> Pcre.pmatch ~rex:(Pcre.regexp ("^" ^ prefix)) uri)
39 test_prefix uri && (not (String.sub uri (String.length uri - 4) 4 = ".var"))
41 let uri_predicate = ref (constants_only ~prefix:"")
43 let uri_pred_of_conf tryvars ~prefix ~varsprefix =
45 constants_only ~prefix
47 let test_prefix = Pcre.pmatch ~rex:(Pcre.regexp ("^" ^ prefix)) in
48 let test_varsprefix = Pcre.pmatch ~rex:(Pcre.regexp ("^" ^ varsprefix)) in
50 if String.sub uri (String.length uri - 4) 4 = ".var" then
55 module DisambiguateCallbacks =
57 let interactive_user_uri_choice
58 ~selection_mode ?ok ?enable_button_for_non_vars ~title ~msg ~id choices =
59 List.filter !uri_predicate choices
61 let interactive_interpretation_choice =
65 | _::tl -> n::(aux (n+1) tl)
69 let input_or_locate_uri ~title = fail "Unknown identifier"
72 module Disambiguate' = DisambiguatingParser.Make (DisambiguateCallbacks)
74 let parse dbd ?(uri_pred = constants_only ~prefix:"") =
75 uri_predicate := uri_pred;
76 let empty_environment =
77 DisambiguatingParser.EnvironmentP3.of_string
78 DisambiguatingParser.EnvironmentP3.empty
80 let empty_context = [] in
81 let empty_metasenv = [] in
83 (Disambiguate'.disambiguate_term
84 ~dbd empty_context empty_metasenv input empty_environment
85 ~initial_ugraph:ugraph)
87 let parse_pp dbd ?uri_pred input ugraph =
88 List.map (fun (_,_,t,_) -> CicPp.ppterm t)
89 (parse dbd ?uri_pred input ugraph )