-let mk_prefixes str xpointer =
- let rec aux curi =
- function
- [he] ->
- let prefix_uri = curi ^ "/" ^ he
- and name = List.hd (Str.split (Str.regexp "\\.") he) in
- [ normalize prefix_uri ; name ]
- | he::tl ->
- let prefix_uri = curi ^ "/" ^ he in
- (normalize prefix_uri)::(aux prefix_uri tl)
- | _ -> raise (IllFormedUri str)
- in
- let tokens = (Str.split (Str.regexp "/") str) in
- (* ty = "cic:" *)
- let (ty, sp) =
- (try (List.hd tokens, List.tl tokens)
- with Failure "hd" | Failure "tl" ->
- raise (IllFormedUri str))
- in
- (aux ty sp) @ [xpointer]
-;;
-
-
-let sharp_rex =
- Str.regexp "#"
-;;
-
-let uri_of_string str =
- let base, xpointer =
- match Str.split sharp_rex str with
- | [base] -> base,""
- | [base; xpointer] -> base,xpointer
- | _ -> raise (IllFormedUri str)
- in
- try
- SetOfStrings.find str !set_of_uri
- with
- Not_found ->
- let uri = Array.of_list (mk_prefixes base xpointer), fresh_id () in
- add_to_uriset ~suri:str uri
+let strip_xpointer ((uri,_) as olduri) =
+ try
+ let index = String.rindex uri '#' in
+ let no_xpointer = String.sub uri 0 index in
+ uri_of_string no_xpointer
+ with
+ Not_found -> olduri
+
+let clear_suffix uri ?(pat2="") pat1 =
+ try
+ let index = String.rindex uri '.' in
+ let index' = index + 1 in
+ let suffix = String.sub uri index' (String.length uri - index') in
+ if pat1 = suffix || pat2 = suffix then
+ String.sub uri 0 index
+ else
+ uri
+ with
+ Not_found -> assert false
+
+let has_suffix uri pat =
+ try
+ let index = String.rindex uri '.' + 1 in
+ let suffix = String.sub uri index (String.length uri - index) in
+ pat = suffix
+ with
+ Not_found -> assert false
+
+let _types = "types"
+let _dottypes = ".types"
+let _ann = "ann"
+let _dotann = ".ann"
+let _var = "var"
+let _dotbody = ".body"
+let _con = "con"
+let _xpointer = "#xpointer(1/"
+
+let cicuri_of_uri (uri, _) =
+ uri_of_string (clear_suffix uri ~pat2:_types _ann)