123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566(*
* Copyright (c) 2014 Leo White <leo@lpw25.net>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*)openOr_errortypet=Odoc_model.Lang.Page.tletroot(t:Odoc_model.Lang.Page.t)=matcht.Odoc_model.Lang.Page.namewith|`Page(root,_)->rootletsavefilet=letdir=Fs.File.dirnamefileinletbase=Fs.File.(to_string@@basenamefile)inletfile=ifAstring.String.is_prefix~affix:"page-"basethenfileelseFs.File.create~directory:dir~name:("page-"^base)inFs.Directory.mkdir_pdir;letoc=open_out_bin(Fs.File.to_stringfile)inRoot.saveoc(roott);Marshal.to_channeloct[];close_outocletload=letpages=Hashtbl.create23(* because. *)infunfile->letfile=Fs.File.to_stringfileinmatchHashtbl.findpagesfilewith|page->Okpage|exceptionNot_found->tryletic=open_in_binfileinletres=Root.loadfileic>>=fun_root->letres=Marshal.from_channelicinHashtbl.addpagesfileres;Okresinclose_inic;reswithexn->letmsg=Printf.sprintf"Error while unmarshalling %S: %s\n%!"file(matchexnwith|Failures->s|_->Printexc.to_stringexn)inError(`Msgmsg)