-;;
-
-let cicuri_of_uri uri =
- let completeuri = string_of_uri uri in
- let newcompleteuri =
- (Str.replace_first (Str.regexp "\\.types$") ""
- (Str.replace_first (Str.regexp "\\.ann$") "" completeuri))
- in
- if completeuri = newcompleteuri then
- uri
- else
- let newuri = Array.copy uri in
- newuri.(Array.length uri - 3) <- newcompleteuri ;
- newuri
-;;
-
-let annuri_of_uri uri =
- let completeuri = string_of_uri uri in
- if Str.string_match (Str.regexp ".*\\.ann$") completeuri 0 then
- uri
+ with
+ Not_found -> assert false
+
+let has_suffix uri (pat,n) =
+ try
+ let suffix = String.sub uri (String.length uri - n) n in
+ pat = suffix
+ with
+ Not_found -> assert false
+
+let _dottypes = ".types"
+let _types = "types",5
+let _ann = "ann",3
+let _dotann = ".ann"
+let _var = "var",3
+let _dotbody = ".body"
+let _con = "con",3
+let _xpointer = "#xpointer(1/"
+
+let cicuri_of_uri (uri, _) = uri_of_string (clear_suffix uri ~pat2:_types _ann)
+
+let annuri_of_uri (uri , _) = uri_of_string ((clear_suffix uri _ann) ^ _dotann)
+
+let uri_is_annuri (uri, _) = has_suffix uri _ann
+
+let uri_is_var (uri, _) = has_suffix uri _var
+
+let uri_is_con (uri, _) = has_suffix uri _con
+
+let bodyuri_of_uri (uri, _) =
+ if has_suffix uri _con then
+ Some (uri_of_string (uri ^ _dotbody))