From cc6e7ad571d40a88686427bd75e0fa38c0fa120b Mon Sep 17 00:00:00 2001 From: Stefano Zacchiroli Date: Mon, 19 Apr 2004 12:06:25 +0000 Subject: [PATCH] - embedded ClientHTTP module (not very nice, but ClientHTTP shouldn't belongs to Getter module!) - added PxpHelmConf module, repository of Pxp configurations for helm --- helm/ocaml/pxp/.depend | 2 ++ helm/ocaml/pxp/Makefile | 4 +-- helm/ocaml/pxp/pxpHelmConf.ml | 38 +++++++++++++++++++++++++++ helm/ocaml/pxp/pxpHelmConf.mli | 28 ++++++++++++++++++++ helm/ocaml/pxp/pxpUrlResolver.ml | 45 ++++++++++++++++++++++++++++++-- 5 files changed, 113 insertions(+), 4 deletions(-) create mode 100644 helm/ocaml/pxp/pxpHelmConf.ml create mode 100644 helm/ocaml/pxp/pxpHelmConf.mli diff --git a/helm/ocaml/pxp/.depend b/helm/ocaml/pxp/.depend index c2a1a4be6..194343c47 100644 --- a/helm/ocaml/pxp/.depend +++ b/helm/ocaml/pxp/.depend @@ -1,2 +1,4 @@ pxpUrlResolver.cmo: pxpUrlResolver.cmi pxpUrlResolver.cmx: pxpUrlResolver.cmi +pxpHelmConf.cmo: pxpHelmConf.cmi +pxpHelmConf.cmx: pxpHelmConf.cmi diff --git a/helm/ocaml/pxp/Makefile b/helm/ocaml/pxp/Makefile index 40f698344..9086aa0c2 100644 --- a/helm/ocaml/pxp/Makefile +++ b/helm/ocaml/pxp/Makefile @@ -1,8 +1,8 @@ PACKAGE = pxp -REQUIRES = helm-getter +REQUIRES = pxp-engine pxp-lex-utf8 pxp-lex-iso88591 pxp-lex-iso885915 http PREDICATES = -INTERFACE_FILES = pxpUrlResolver.mli +INTERFACE_FILES = pxpUrlResolver.mli pxpHelmConf.mli IMPLEMENTATION_FILES = $(INTERFACE_FILES:%.mli=%.ml) EXTRA_OBJECTS_TO_INSTALL = EXTRA_OBJECTS_TO_CLEAN = diff --git a/helm/ocaml/pxp/pxpHelmConf.ml b/helm/ocaml/pxp/pxpHelmConf.ml new file mode 100644 index 000000000..88969df11 --- /dev/null +++ b/helm/ocaml/pxp/pxpHelmConf.ml @@ -0,0 +1,38 @@ +(* Copyright (C) 2004, HELM Team. + * + * This file is part of HELM, an Hypertextual, Electronic + * Library of Mathematics, developed at the Computer Science + * Department, University of Bologna, Italy. + * + * HELM is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * HELM is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with HELM; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, + * MA 02111-1307, USA. + * + * For details, see the HELM World-Wide-Web page, + * http://helm.cs.unibo.it/ + *) + +class warner = + object + method warn w = prerr_endline ("Pxp warning: " ^ w) + end + +let pxp_config = + { Pxp_types.default_config with + Pxp_types.encoding = `Enc_utf8; + Pxp_types.warner = new warner + } + +let pxp_spec = Pxp_tree_parser.default_spec + diff --git a/helm/ocaml/pxp/pxpHelmConf.mli b/helm/ocaml/pxp/pxpHelmConf.mli new file mode 100644 index 000000000..d18d63239 --- /dev/null +++ b/helm/ocaml/pxp/pxpHelmConf.mli @@ -0,0 +1,28 @@ +(* Copyright (C) 2004, HELM Team. + * + * This file is part of HELM, an Hypertextual, Electronic + * Library of Mathematics, developed at the Computer Science + * Department, University of Bologna, Italy. + * + * HELM is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * HELM is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with HELM; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, + * MA 02111-1307, USA. + * + * For details, see the HELM World-Wide-Web page, + * http://helm.cs.unibo.it/ + *) + +val pxp_config: Pxp_types.config +val pxp_spec: ('a Pxp_document.node Pxp_document.extension as 'a) Pxp_document.spec + diff --git a/helm/ocaml/pxp/pxpUrlResolver.ml b/helm/ocaml/pxp/pxpUrlResolver.ml index 89d540e62..ec94b4e5e 100644 --- a/helm/ocaml/pxp/pxpUrlResolver.ml +++ b/helm/ocaml/pxp/pxpUrlResolver.ml @@ -23,7 +23,47 @@ * http://cs.unibo.it/helm/. *) -(* This resolver uses ClientHTTP to download the files from the Web *) +(* cut and paste from ../getter/clientHTTP.ml *) +exception HttpClientError of string * string;; (* reason, uri *) + +let send cmd = + try + ignore (Http_client.http_get cmd) + with + e -> raise (HttpClientError (Printexc.to_string e, cmd)) +;; + +let get uri = + try + Http_client.http_get uri + with + e -> raise (HttpClientError (Printexc.to_string e, uri)) +;; + +let get_and_save uri dest_filename = + let reply = get uri + and out_channel = open_out dest_filename in + output_string out_channel reply ; + close_out out_channel +;; + +let get_and_save_to_tmp uri = + let flat_string s s' c = + let cs = String.copy s in + for i = 0 to (String.length s) - 1 do + if String.contains s' s.[i] then cs.[i] <- c + done ; + cs + in + let user = try Unix.getlogin () with _ -> "" in + let tmp_file = + Filename.temp_file (user ^ flat_string uri ".-=:;!?/&" '_') "" + in + get_and_save uri tmp_file ; + tmp_file +;; +(* / cut and paste from ../getter/clientHTTP.ml *) + let url_resolver = let url_of_id = function @@ -33,7 +73,7 @@ let url_resolver = | _ -> raise Pxp_reader.Not_competent in let channel_of_url _ url = - let file = ClientHTTP.get_and_save_to_tmp (Neturl.string_of_url url) in + let file = get_and_save_to_tmp (Neturl.string_of_url url) in let ch = open_in file in Unix.unlink file ; ch,None @@ -41,3 +81,4 @@ let url_resolver = new Pxp_reader.resolve_read_url_channel ~url_of_id ~channel_of_url () ;; + -- 2.39.2