let regexp ident_cont' = ident_cont | tex_token
let regexp ident = (alpha ident_cont*) | ('_' ident_cont+)
let regexp ident' = ((alpha | tex_token) ident_cont'*) | ('_' ident_cont'+)
+let regexp uri_step = (alpha (ident_cont|'-')*)
let regexp meta = implicit num
let regexp qstring = '"' [^ '"']* '"'
+let regexp uri_suffix = "con"|"ind"|"var"
let regexp uri =
("cic:/" | "theory:/") (* schema *)
- ident ('/' ident)* (* path *)
- ('.' ident)+ (* ext *)
- ("#xpointer(" num ('/' num)+ ")")? (* xpointer *)
+ uri_step ('/' uri_step)* (* path *)
+ ('.' uri_suffix)+ (* ext *)
+ ("#xpointer(" num ('/' num)+ ")")? (* xpointer *)
(* let regexp catchall = .* *)
let keywords = Hashtbl.create 17
let ident = "\\("^alpha^ident_cont^"*\\|_"^ident_cont^"+\\)" in
let rex = Str.regexp ("^"^ident^"$") in
if Str.string_match rex id 0 then
- let rex = Str.regexp
- ("^\\(cic:/\\|theory:/\\)"^ident^
- "\\(/"^ident^"+\\)*\\(\\."^ident^"\\)+"^
- "\\(#xpointer("^ num^"\\(/"^num^"\\)+)\\)?$")
- in
- if Str.string_match rex uri 0 then
+ if (try ignore (UriManager.uri_of_string uri); true
+ with UriManager.IllFormedUri _ -> false)
+ then
TacticAst.Ident_alias (id, uri)
else
raise (Parse_error (loc,sprintf "Not a valid uri: %s" uri))