X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Focaml%2Fmathql_interpreter%2Feval.ml;h=43296cd0732d27fa226cc68143f2d09b40921b31;hb=c5e1e4d1726bd78464a7d458df3aca047749567b;hp=9a5d90dee13762f5200c273b9e0f14f1a2dc734a;hpb=6a1d05b388683befc860b48b4f2bbaf42f58a112;p=helm.git diff --git a/helm/ocaml/mathql_interpreter/eval.ml b/helm/ocaml/mathql_interpreter/eval.ml index 9a5d90dee..43296cd07 100644 --- a/helm/ocaml/mathql_interpreter/eval.ml +++ b/helm/ocaml/mathql_interpreter/eval.ml @@ -1,9 +1,33 @@ +(* Copyright (C) 2000, 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://cs.unibo.it/helm/. + *) (* * *) -open Mathql;; +open MathQL;; (* * conversione di un pattern @@ -13,28 +37,52 @@ let rec patterneval p = [] -> "" | head::tail -> let h = match head with - MQString (s) -> s - | MQSlash -> "/" - | MQAnyChr -> "[^/]?" - | MQAst -> "[^/]*" - | MQAstAst -> ".*" + MQBC s -> Str.global_replace (Str.regexp "\.") "\\\\\." s + | MQBD -> "/" + | MQBQ -> "[^/#]?" + | MQBS -> "[^/#]*" + | MQBSS -> "[^#]*" in h ^ (patterneval tail) ;; +let rec fieval fi = + match fi with + [] -> "" + | MQFC i :: tail -> "/" ^ (string_of_int i) ^ (fieval tail) + | MQFS :: tail -> "[^/]*" ^ (fieval tail) + | MQFSS :: tail -> ".*" ^ (fieval tail) +;; + (* * conversione di un fragment identifier *) let fieval fi = - match fst fi with - None -> "" - | Some i -> - let s = "#xpointer\(1/" ^ string_of_int (i) in - match snd fi with - None -> - s ^ "\)" - | Some j -> - s ^ "/" ^ string_of_int j ^ "\)" + if fi = [] then + "" + else + "#xpointer\\\\(1" ^ fieval fi ^ "\\\\)" +;; + +(* + * valuta l'estensione + * + * 20/05/2002: non piu' necessario: l'estensione fa eventualmente + * parte del pattern precedente + *) +let exteval ext = + match ext with + "" -> "" + | _ -> ("\." ^ ext) +;; + +(* + * valuta il preambolo + *) +let preeval p = + match p with + Some s -> s + | None -> "[^/]*" ;; (* @@ -44,6 +92,7 @@ let fieval fi = * SQL standard LIKE perche' MathQL prevede esperssioni con "*" * e con "**". *) -let pattern_match preamble pattern ext fragid = - " ~ '" ^ preamble ^ ":/" ^ (patterneval pattern) ^ "." ^ ext ^ (fieval fragid) ^ "'" +let pattern_match (preamble, pattern, fragid) = + " ~ '^" ^ (preeval preamble) ^ ":/" ^ (patterneval pattern) ^ (fieval fragid) ^ "$'" ;; +