12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152typedtd=stringoptionmoduleError=Syndic_errortypepos=Xmlm.postypetag=Xmlm.tagtypet=Nodeofpos*tag*tlist|Dataofpos*stringletresolve~xmlbaseuri=matchxmlbasewithNone->uri|Someb->Uri.resolve""buri(* Specialized version of the Xmlm.make_input one. *)letinput_of_channelfh=(* Xmlm.make_input does not raise any exception. *)Xmlm.make_input(`Channelfh)letof_xmlminput=leteltagdatas=Node(Xmlm.posinput,tag,datas)inletdatadata=Data(Xmlm.posinput,data)intryXmlm.input_doc_tree~el~datainputwithXmlm.Error(pos,e)->raise(Error.Error(pos,Xmlm.error_messagee))letget_position=functionNode(pos,_,_)->pos|Data(pos,_)->posletrect_to_xmlmtoutput=matchtwith|Data(_pos,d)->(tryXmlm.outputoutput(`Datad)withXmlm.Error(pos,e)->raise(Error.Error(pos,Xmlm.error_messagee)))|Node(_pos,tag,t_sub)->(Xmlm.outputoutput(`El_starttag);List.iter(funt->t_to_xmlmtoutput)t_sub;tryXmlm.outputoutput`El_endwithXmlm.Error(pos,e)->raise(Error.Error(pos,Xmlm.error_messagee)))(* Specialized version of the Xmlm one. *)letmake_output?ns_prefixdest=(* Xmlm.make_output does not raise any exception. *)Xmlm.make_outputdest~decl:true?ns_prefixletto_xmlm?dtdtoutput=(tryXmlm.outputoutput(`Dtddtd)withXmlm.Error(pos,e)->raise(Error.Error(pos,Xmlm.error_messagee)));t_to_xmlmtoutputletto_buffer?ns_prefixtb=letoutput=Xmlm.make_output~decl:false(`Bufferb)?ns_prefixinto_xmlmtoutputletto_string?ns_prefixt=letb=Buffer.create4096into_buffer?ns_prefixtb;Buffer.contentsb