]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/ocaml/mathql_interpreter/eval.ml
diff and sortedby implemented
[helm.git] / helm / ocaml / mathql_interpreter / eval.ml
index 81be805201317557c330dc08d116e79411a7f6d6..43296cd0732d27fa226cc68143f2d09b40921b31 100644 (file)
@@ -37,7 +37,7 @@ let rec patterneval p =
    [] -> ""
  | head::tail ->
     let h = match head with
-               MQBC (s) -> Str.global_replace (Str.regexp "\.") "\\\\\." s
+               MQBC s -> Str.global_replace (Str.regexp "\.") "\\\\\." s
             |  MQBD -> "/"
             |  MQBQ -> "[^/#]?"
             |  MQBS -> "[^/#]*"
@@ -46,18 +46,22 @@ let rec patterneval p =
      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 fi with
-    [] -> ""
- |  MQFC i :: tail ->  
-     let s = "#xpointer\\\\(1/" ^ string_of_int (i) in
-      match tail with
-         [] -> s ^ "\\\\)"
-      |  MQFC j :: tail2 ->
-         s ^ "/" ^ string_of_int j ^ "\\\\)"
+ if fi = [] then
+  ""
+ else
+  "#xpointer\\\\(1" ^ fieval fi ^ "\\\\)"
 ;;
 
 (*
@@ -77,7 +81,8 @@ let exteval ext =
  *)
 let preeval p =
  match p with 
-   Some s -> s
+    Some s -> s
+  | None -> "[^/]*"
 ;;
 
 (*
@@ -88,6 +93,6 @@ let preeval p =
  * e con "**".
  *)
 let pattern_match (preamble, pattern, fragid) =
- " ~ '" ^ (preeval preamble) ^ ":/" ^ (patterneval pattern) ^ (fieval fragid) ^ "'"
+ " ~ '^" ^ (preeval preamble) ^ ":/" ^ (patterneval pattern) ^ (fieval fragid) ^ "$'"
 ;;