let parse_s ?opt ?err ?(multi=false) f field par =
let field = String.lowercase field in
try
let (_loc,s) = (assoc field par) in
f (_loc,s)
with Not_found ->
if Option.is_none opt then
if Option.is_none err then raise Not_found
else begin
let (_,((startpos,endpos),_)) = List.hd par in
let s =
Printf.sprintf "%s : %s--%s"
(Format822.pp_posfname startpos)
(Format822.pp_lpos startpos)
(Format822.pp_lpos endpos)
in
raise (ParseError (field,(Option.get err)^" (no default declared) " ^ s))
end
else Option.get opt