123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250(** Output for HTML combinators.
This output type is used to produce a string reasonably efficiently from
a tree of combinators.
{b NOTE}: this is experimental and an unstable API.
@since 0.12
@open *)moduleOut:sigtypetvalcreate_of_buffer:Buffer.t->tvalcreate_of_out:IO.Output.t->tvalflush:t->unitvaladd_char:t->char->unitvaladd_string:t->string->unitvaladd_format_nl:t->unitvalwith_no_format_nl:t->(unit->'a)->'aend=structtypet={out:IO.Output.t;mutablefmt_nl:bool;(* if true, we print [\n] around tags to format the html *)}letcreate_of_outout={out;fmt_nl=true}letcreate_of_bufferbuf:t=create_of_out(IO.Output.of_bufferbuf)let[@inline]flushself:unit=IO.Output.flushself.outlet[@inline]add_charselfc=IO.Output.output_charself.outclet[@inline]add_stringselfs=IO.Output.output_stringself.outslet[@inline]add_format_nlself=ifself.fmt_nlthenadd_charself'\n'letwith_no_format_nlselff=ifself.fmt_nlthen(self.fmt_nl<-false;tryletx=f()inself.fmt_nl<-true;xwithe->self.fmt_nl<-true;raisee)elsef()endtypeattribute=string*string(** An attribute, i.e. a key/value pair *)typeelt=Out.t->unit(** A html element. It is represented by its output function, so we
can directly print it. *)typevoid=?if_:bool->attributelist->elt(** Element without children. *)typenary=?if_:bool->attributelist->eltlist->elt(** Element with children, represented as a list.
@param if_ if false, do not print anything (default true) *)(** A chunk of sub-elements, possibly empty.
@inline *)typesub_elt=[`Eofelt|`Lofeltlist|`SofeltSeq.t|`Nil]typenary'=?if_:bool->attributelist->sub_eltlist->elt(** Element with children, represented as a list of {!sub_elt} to be flattened
@param if_ if false, do not print anything (default true) *)(**/**)moduleHelpers_=struct(** Escape string so it can be safely embedded in HTML text. *)let_str_escape(out:Out.t)(s:string):unit=String.iter(function|'<'->Out.add_stringout"<"|'>'->Out.add_stringout">"|'&'->Out.add_stringout"&"|'"'->Out.add_stringout"""|'\''->Out.add_stringout"'"|c->Out.add_charoutc)s(** Print the value part of an attribute *)let_attr_escape(out:Out.t)(s:string)=Out.add_charout'"';_str_escapeouts;Out.add_charout'"'(** Output a list of attributes. *)let_write_attrs(out:Out.t)(l:attributelist):unit=List.iter(fun(k,v)->Out.add_charout' ';Out.add_stringoutk;Out.add_charout'=';_attr_escapeoutv)l(** Write sub-elements of a {!nary'} element, returns [true] iff
at least one sub-element was written. *)let_write_subs(out:Out.t)(l:sub_eltlist):bool=lethas_sub=reffalseinletprepend_white()=has_sub:=true;Out.add_format_nlout;inletemit1=function|`Ex->prepend_white();xout|`Ll->List.iter(fune->prepend_white();eout)l|`Sl->Seq.iter(fune->prepend_white();eout)l|`Nil->()inList.iteremit1l;!has_sub(** Write a tag, with its attributes.
@param void if true, end with "/>", otherwise end with ">" *)let_write_tag_attrs~void(out:Out.t)(tag:string)(attrs:attributelist):unit=Out.add_stringout"<";Out.add_stringouttag;_write_attrsoutattrs;ifvoidthenOut.add_stringout"/>"elseOut.add_stringout">"endopenHelpers_(**/**)(** Sub-element with a single element inside. *)let[@inline]sub_e(elt:elt):sub_elt=`Eelt(** Sub-element with a list of items inside. *)let[@inline]sub_l(l:eltlist):sub_elt=`Ll(** Sub-element with a sequence ({!Seq.t}) of items inside. *)let[@inline]sub_seq(l:eltSeq.t):sub_elt=`Sl(** Helper to build a {!Seq.t} from an array. *)letseq_of_array(a:_array):_Seq.t=letrecloopi()=ifi=Array.lengthathenSeq.NilelseSeq.Cons(a.(i),loop(i+1))inloop0(** Sub-element with nothing inside. Useful in conditionals, when one
decides not to emit a sub-element at all. *)letsub_empty:sub_elt=`Nil(** Emit a string value, which will be escaped. *)lettxt(txt:string):elt=funout->_str_escapeouttxt(** Formatted version of {!txt} *)lettxtffmt=Format.kasprintf(funs->funout->_str_escapeouts)fmt(** Emit raw HTML. Caution, this can lead to injection vulnerabilities,
never use with text that comes from untrusted users. *)letraw_html(s:string):elt=funout->Out.add_stringouts(** tag "area", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/area} mdn} *)letarea:void=fun?(if_=true)attrsout->ifif_then(_write_tag_attrs~void:trueout"area"attrs;)(** tag "base", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/base} mdn} *)letbase:void=fun?(if_=true)attrsout->ifif_then(_write_tag_attrs~void:trueout"base"attrs;)(** tag "br", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/br} mdn} *)letbr:void=fun?(if_=true)attrsout->ifif_then(_write_tag_attrs~void:trueout"br"attrs;)(** tag "col", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/col} mdn} *)letcol:void=fun?(if_=true)attrsout->ifif_then(_write_tag_attrs~void:trueout"col"attrs;)(** tag "embed", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/embed} mdn} *)letembed:void=fun?(if_=true)attrsout->ifif_then(_write_tag_attrs~void:trueout"embed"attrs;)(** tag "hr", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/hr} mdn} *)lethr:void=fun?(if_=true)attrsout->ifif_then(_write_tag_attrs~void:trueout"hr"attrs;)(** tag "img", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img} mdn} *)letimg:void=fun?(if_=true)attrsout->ifif_then(_write_tag_attrs~void:trueout"img"attrs;)(** tag "input", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input} mdn} *)letinput:void=fun?(if_=true)attrsout->ifif_then(_write_tag_attrs~void:trueout"input"attrs;)(** tag "link", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/link} mdn} *)letlink:void=fun?(if_=true)attrsout->ifif_then(_write_tag_attrs~void:trueout"link"attrs;)(** tag "menuitem", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/menuitem} mdn} *)letmenuitem:void=fun?(if_=true)attrsout->ifif_then(_write_tag_attrs~void:trueout"menuitem"attrs;)(** tag "meta", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta} mdn} *)letmeta:void=fun?(if_=true)attrsout->ifif_then(_write_tag_attrs~void:trueout"meta"attrs;)(** tag "param", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/param} mdn} *)letparam:void=fun?(if_=true)attrsout->ifif_then(_write_tag_attrs~void:trueout"param"attrs;)(** tag "source", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/source} mdn} *)letsource:void=fun?(if_=true)attrsout->ifif_then(_write_tag_attrs~void:trueout"source"attrs;)(** tag "track", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/track} mdn} *)lettrack:void=fun?(if_=true)attrsout->ifif_then(_write_tag_attrs~void:trueout"track"attrs;)(** tag "wbr", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/wbr} mdn} *)letwbr:void=fun?(if_=true)attrsout->ifif_then(_write_tag_attrs~void:trueout"wbr"attrs;)(** tag "a", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a} mdn} *)leta:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"a"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</a>")(** tag "a", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a} mdn} *)leta':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"a"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</a>")(** tag "abbr", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/abbr} mdn} *)letabbr:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"abbr"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</abbr>")(** tag "abbr", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/abbr} mdn} *)letabbr':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"abbr"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</abbr>")(** tag "address", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/address} mdn} *)letaddress:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"address"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</address>")(** tag "address", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/address} mdn} *)letaddress':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"address"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</address>")(** tag "article", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/article} mdn} *)letarticle:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"article"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</article>")(** tag "article", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/article} mdn} *)letarticle':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"article"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</article>")(** tag "aside", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/aside} mdn} *)letaside:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"aside"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</aside>")(** tag "aside", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/aside} mdn} *)letaside':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"aside"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</aside>")(** tag "audio", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/audio} mdn} *)letaudio:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"audio"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</audio>")(** tag "audio", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/audio} mdn} *)letaudio':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"audio"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</audio>")(** tag "b", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/b} mdn} *)letb:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"b"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</b>")(** tag "b", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/b} mdn} *)letb':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"b"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</b>")(** tag "bdi", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/bdi} mdn} *)letbdi:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"bdi"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</bdi>")(** tag "bdi", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/bdi} mdn} *)letbdi':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"bdi"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</bdi>")(** tag "bdo", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/bdo} mdn} *)letbdo:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"bdo"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</bdo>")(** tag "bdo", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/bdo} mdn} *)letbdo':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"bdo"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</bdo>")(** tag "blockquote", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/blockquote} mdn} *)letblockquote:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"blockquote"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</blockquote>")(** tag "blockquote", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/blockquote} mdn} *)letblockquote':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"blockquote"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</blockquote>")(** tag "body", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/body} mdn} *)letbody:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"body"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</body>")(** tag "body", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/body} mdn} *)letbody':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"body"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</body>")(** tag "button", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button} mdn} *)letbutton:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"button"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</button>")(** tag "button", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button} mdn} *)letbutton':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"button"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</button>")(** tag "canvas", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/canvas} mdn} *)letcanvas:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"canvas"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</canvas>")(** tag "canvas", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/canvas} mdn} *)letcanvas':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"canvas"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</canvas>")(** tag "caption", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/caption} mdn} *)letcaption:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"caption"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</caption>")(** tag "caption", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/caption} mdn} *)letcaption':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"caption"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</caption>")(** tag "cite", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/cite} mdn} *)letcite:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"cite"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</cite>")(** tag "cite", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/cite} mdn} *)letcite':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"cite"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</cite>")(** tag "code", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/code} mdn} *)letcode:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"code"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</code>")(** tag "code", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/code} mdn} *)letcode':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"code"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</code>")(** tag "colgroup", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/colgroup} mdn} *)letcolgroup:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"colgroup"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</colgroup>")(** tag "colgroup", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/colgroup} mdn} *)letcolgroup':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"colgroup"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</colgroup>")(** tag "data", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/data} mdn} *)letdata:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"data"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</data>")(** tag "data", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/data} mdn} *)letdata':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"data"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</data>")(** tag "datalist", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/datalist} mdn} *)letdatalist:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"datalist"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</datalist>")(** tag "datalist", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/datalist} mdn} *)letdatalist':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"datalist"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</datalist>")(** tag "dd", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dd} mdn} *)letdd:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"dd"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</dd>")(** tag "dd", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dd} mdn} *)letdd':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"dd"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</dd>")(** tag "del", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/del} mdn} *)letdel:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"del"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</del>")(** tag "del", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/del} mdn} *)letdel':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"del"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</del>")(** tag "details", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/details} mdn} *)letdetails:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"details"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</details>")(** tag "details", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/details} mdn} *)letdetails':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"details"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</details>")(** tag "dfn", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dfn} mdn} *)letdfn:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"dfn"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</dfn>")(** tag "dfn", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dfn} mdn} *)letdfn':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"dfn"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</dfn>")(** tag "dialog", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dialog} mdn} *)letdialog:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"dialog"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</dialog>")(** tag "dialog", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dialog} mdn} *)letdialog':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"dialog"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</dialog>")(** tag "div", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/div} mdn} *)letdiv:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"div"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</div>")(** tag "div", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/div} mdn} *)letdiv':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"div"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</div>")(** tag "dl", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dl} mdn} *)letdl:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"dl"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</dl>")(** tag "dl", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dl} mdn} *)letdl':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"dl"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</dl>")(** tag "dt", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dt} mdn} *)letdt:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"dt"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</dt>")(** tag "dt", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dt} mdn} *)letdt':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"dt"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</dt>")(** tag "em", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/em} mdn} *)letem:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"em"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</em>")(** tag "em", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/em} mdn} *)letem':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"em"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</em>")(** tag "fieldset", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/fieldset} mdn} *)letfieldset:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"fieldset"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</fieldset>")(** tag "fieldset", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/fieldset} mdn} *)letfieldset':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"fieldset"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</fieldset>")(** tag "figcaption", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/figcaption} mdn} *)letfigcaption:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"figcaption"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</figcaption>")(** tag "figcaption", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/figcaption} mdn} *)letfigcaption':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"figcaption"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</figcaption>")(** tag "figure", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/figure} mdn} *)letfigure:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"figure"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</figure>")(** tag "figure", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/figure} mdn} *)letfigure':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"figure"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</figure>")(** tag "footer", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/footer} mdn} *)letfooter:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"footer"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</footer>")(** tag "footer", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/footer} mdn} *)letfooter':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"footer"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</footer>")(** tag "form", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form} mdn} *)letform:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"form"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</form>")(** tag "form", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form} mdn} *)letform':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"form"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</form>")(** tag "h1", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/h1} mdn} *)leth1:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"h1"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</h1>")(** tag "h1", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/h1} mdn} *)leth1':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"h1"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</h1>")(** tag "h2", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/h2} mdn} *)leth2:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"h2"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</h2>")(** tag "h2", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/h2} mdn} *)leth2':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"h2"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</h2>")(** tag "h3", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/h3} mdn} *)leth3:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"h3"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</h3>")(** tag "h3", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/h3} mdn} *)leth3':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"h3"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</h3>")(** tag "h4", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/h4} mdn} *)leth4:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"h4"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</h4>")(** tag "h4", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/h4} mdn} *)leth4':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"h4"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</h4>")(** tag "h5", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/h5} mdn} *)leth5:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"h5"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</h5>")(** tag "h5", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/h5} mdn} *)leth5':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"h5"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</h5>")(** tag "h6", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/h6} mdn} *)leth6:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"h6"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</h6>")(** tag "h6", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/h6} mdn} *)leth6':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"h6"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</h6>")(** tag "head", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/head} mdn} *)lethead:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"head"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</head>")(** tag "head", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/head} mdn} *)lethead':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"head"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</head>")(** tag "header", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/header} mdn} *)letheader:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"header"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</header>")(** tag "header", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/header} mdn} *)letheader':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"header"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</header>")(** tag "hgroup", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/hgroup} mdn} *)lethgroup:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"hgroup"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</hgroup>")(** tag "hgroup", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/hgroup} mdn} *)lethgroup':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"hgroup"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</hgroup>")(** tag "html", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/html} mdn} *)lethtml:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"html"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</html>")(** tag "html", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/html} mdn} *)lethtml':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"html"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</html>")(** tag "i", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/i} mdn} *)leti:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"i"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</i>")(** tag "i", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/i} mdn} *)leti':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"i"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</i>")(** tag "iframe", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe} mdn} *)letiframe:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"iframe"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</iframe>")(** tag "iframe", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe} mdn} *)letiframe':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"iframe"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</iframe>")(** tag "ins", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ins} mdn} *)letins:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"ins"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</ins>")(** tag "ins", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ins} mdn} *)letins':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"ins"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</ins>")(** tag "kbd", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/kbd} mdn} *)letkbd:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"kbd"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</kbd>")(** tag "kbd", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/kbd} mdn} *)letkbd':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"kbd"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</kbd>")(** tag "label", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/label} mdn} *)letlabel:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"label"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</label>")(** tag "label", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/label} mdn} *)letlabel':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"label"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</label>")(** tag "legend", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/legend} mdn} *)letlegend:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"legend"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</legend>")(** tag "legend", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/legend} mdn} *)letlegend':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"legend"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</legend>")(** tag "li", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/li} mdn} *)letli:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"li"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</li>")(** tag "li", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/li} mdn} *)letli':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"li"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</li>")(** tag "main", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/main} mdn} *)letmain:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"main"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</main>")(** tag "main", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/main} mdn} *)letmain':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"main"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</main>")(** tag "map", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/map} mdn} *)letmap:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"map"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</map>")(** tag "map", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/map} mdn} *)letmap':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"map"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</map>")(** tag "mark", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/mark} mdn} *)letmark:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"mark"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</mark>")(** tag "mark", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/mark} mdn} *)letmark':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"mark"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</mark>")(** tag "math", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/math} mdn} *)letmath:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"math"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</math>")(** tag "math", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/math} mdn} *)letmath':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"math"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</math>")(** tag "menu", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/menu} mdn} *)letmenu:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"menu"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</menu>")(** tag "menu", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/menu} mdn} *)letmenu':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"menu"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</menu>")(** tag "meter", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meter} mdn} *)letmeter:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"meter"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</meter>")(** tag "meter", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meter} mdn} *)letmeter':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"meter"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</meter>")(** tag "nav", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/nav} mdn} *)letnav:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"nav"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</nav>")(** tag "nav", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/nav} mdn} *)letnav':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"nav"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</nav>")(** tag "noscript", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/noscript} mdn} *)letnoscript:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"noscript"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</noscript>")(** tag "noscript", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/noscript} mdn} *)letnoscript':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"noscript"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</noscript>")(** tag "object", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/object} mdn} *)letobject_:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"object"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</object>")(** tag "object", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/object} mdn} *)letobject_':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"object"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</object>")(** tag "ol", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ol} mdn} *)letol:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"ol"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</ol>")(** tag "ol", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ol} mdn} *)letol':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"ol"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</ol>")(** tag "optgroup", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/optgroup} mdn} *)letoptgroup:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"optgroup"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</optgroup>")(** tag "optgroup", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/optgroup} mdn} *)letoptgroup':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"optgroup"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</optgroup>")(** tag "option", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/option} mdn} *)letoption:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"option"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</option>")(** tag "option", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/option} mdn} *)letoption':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"option"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</option>")(** tag "output", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/output} mdn} *)letoutput:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"output"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</output>")(** tag "output", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/output} mdn} *)letoutput':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"output"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</output>")(** tag "p", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/p} mdn} *)letp:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"p"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</p>")(** tag "p", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/p} mdn} *)letp':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"p"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</p>")(** tag "picture", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/picture} mdn} *)letpicture:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"picture"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</picture>")(** tag "picture", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/picture} mdn} *)letpicture':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"picture"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</picture>")(** tag "pre", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/pre} mdn} *)letpre:nary=fun?(if_=true)attrssubout->ifif_then(Out.with_no_format_nlout@@fun()->_write_tag_attrs~void:falseout"pre"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</pre>")(** tag "pre", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/pre} mdn} *)letpre':nary'=fun?(if_=true)attrslout->ifif_then(Out.with_no_format_nlout@@fun()->_write_tag_attrs~void:falseout"pre"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</pre>")(** tag "progress", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/progress} mdn} *)letprogress:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"progress"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</progress>")(** tag "progress", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/progress} mdn} *)letprogress':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"progress"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</progress>")(** tag "q", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/q} mdn} *)letq:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"q"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</q>")(** tag "q", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/q} mdn} *)letq':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"q"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</q>")(** tag "rb", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/rb} mdn} *)letrb:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"rb"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</rb>")(** tag "rb", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/rb} mdn} *)letrb':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"rb"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</rb>")(** tag "rp", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/rp} mdn} *)letrp:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"rp"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</rp>")(** tag "rp", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/rp} mdn} *)letrp':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"rp"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</rp>")(** tag "rt", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/rt} mdn} *)letrt:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"rt"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</rt>")(** tag "rt", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/rt} mdn} *)letrt':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"rt"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</rt>")(** tag "rtc", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/rtc} mdn} *)letrtc:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"rtc"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</rtc>")(** tag "rtc", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/rtc} mdn} *)letrtc':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"rtc"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</rtc>")(** tag "ruby", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ruby} mdn} *)letruby:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"ruby"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</ruby>")(** tag "ruby", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ruby} mdn} *)letruby':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"ruby"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</ruby>")(** tag "s", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/s} mdn} *)lets:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"s"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</s>")(** tag "s", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/s} mdn} *)lets':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"s"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</s>")(** tag "samp", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/samp} mdn} *)letsamp:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"samp"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</samp>")(** tag "samp", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/samp} mdn} *)letsamp':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"samp"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</samp>")(** tag "script", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script} mdn} *)letscript:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"script"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</script>")(** tag "script", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script} mdn} *)letscript':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"script"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</script>")(** tag "section", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/section} mdn} *)letsection:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"section"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</section>")(** tag "section", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/section} mdn} *)letsection':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"section"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</section>")(** tag "select", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/select} mdn} *)letselect:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"select"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</select>")(** tag "select", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/select} mdn} *)letselect':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"select"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</select>")(** tag "slot", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/slot} mdn} *)letslot:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"slot"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</slot>")(** tag "slot", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/slot} mdn} *)letslot':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"slot"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</slot>")(** tag "small", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/small} mdn} *)letsmall:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"small"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</small>")(** tag "small", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/small} mdn} *)letsmall':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"small"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</small>")(** tag "span", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/span} mdn} *)letspan:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"span"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</span>")(** tag "span", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/span} mdn} *)letspan':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"span"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</span>")(** tag "strong", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/strong} mdn} *)letstrong:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"strong"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</strong>")(** tag "strong", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/strong} mdn} *)letstrong':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"strong"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</strong>")(** tag "style", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/style} mdn} *)letstyle:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"style"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</style>")(** tag "style", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/style} mdn} *)letstyle':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"style"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</style>")(** tag "sub", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/sub} mdn} *)letsub:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"sub"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</sub>")(** tag "sub", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/sub} mdn} *)letsub':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"sub"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</sub>")(** tag "summary", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/summary} mdn} *)letsummary:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"summary"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</summary>")(** tag "summary", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/summary} mdn} *)letsummary':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"summary"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</summary>")(** tag "sup", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/sup} mdn} *)letsup:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"sup"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</sup>")(** tag "sup", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/sup} mdn} *)letsup':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"sup"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</sup>")(** tag "svg", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/svg} mdn} *)letsvg:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"svg"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</svg>")(** tag "svg", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/svg} mdn} *)letsvg':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"svg"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</svg>")(** tag "table", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/table} mdn} *)lettable:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"table"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</table>")(** tag "table", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/table} mdn} *)lettable':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"table"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</table>")(** tag "tbody", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/tbody} mdn} *)lettbody:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"tbody"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</tbody>")(** tag "tbody", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/tbody} mdn} *)lettbody':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"tbody"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</tbody>")(** tag "td", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/td} mdn} *)lettd:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"td"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</td>")(** tag "td", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/td} mdn} *)lettd':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"td"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</td>")(** tag "template", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/template} mdn} *)lettemplate:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"template"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</template>")(** tag "template", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/template} mdn} *)lettemplate':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"template"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</template>")(** tag "textarea", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/textarea} mdn} *)lettextarea:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"textarea"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</textarea>")(** tag "textarea", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/textarea} mdn} *)lettextarea':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"textarea"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</textarea>")(** tag "tfoot", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/tfoot} mdn} *)lettfoot:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"tfoot"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</tfoot>")(** tag "tfoot", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/tfoot} mdn} *)lettfoot':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"tfoot"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</tfoot>")(** tag "th", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/th} mdn} *)letth:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"th"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</th>")(** tag "th", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/th} mdn} *)letth':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"th"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</th>")(** tag "thead", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/thead} mdn} *)letthead:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"thead"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</thead>")(** tag "thead", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/thead} mdn} *)letthead':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"thead"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</thead>")(** tag "time", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/time} mdn} *)lettime:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"time"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</time>")(** tag "time", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/time} mdn} *)lettime':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"time"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</time>")(** tag "title", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/title} mdn} *)lettitle:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"title"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</title>")(** tag "title", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/title} mdn} *)lettitle':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"title"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</title>")(** tag "tr", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/tr} mdn} *)lettr:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"tr"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</tr>")(** tag "tr", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/tr} mdn} *)lettr':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"tr"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</tr>")(** tag "u", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/u} mdn} *)letu:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"u"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</u>")(** tag "u", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/u} mdn} *)letu':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"u"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</u>")(** tag "ul", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ul} mdn} *)letul:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"ul"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</ul>")(** tag "ul", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/ul} mdn} *)letul':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"ul"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</ul>")(** tag "var", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/var} mdn} *)letvar:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"var"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</var>")(** tag "var", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/var} mdn} *)letvar':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"var"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</var>")(** tag "video", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/video} mdn} *)letvideo:nary=fun?(if_=true)attrssubout->ifif_then(_write_tag_attrs~void:falseout"video"attrs;List.iter(funsub->Out.add_format_nlout;subout)sub;ifsub<>[]thenOut.add_format_nlout;Out.add_stringout"</video>")(** tag "video", see {{:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/video} mdn} *)letvideo':nary'=fun?(if_=true)attrslout->ifif_then(_write_tag_attrs~void:falseout"video"attrs;lethas_sub=_write_subsoutlinifhas_subthenOut.add_format_nlout;Out.add_stringout"</video>")(** Attributes.
This module contains combinator for the standard attributes.
One can also just use a pair of strings. *)moduleA=structtypet=string->attribute(** Attribute builder *)(** Attribute "accept". *)letaccept:t=funv->"accept",v(** Attribute "accept-charset". *)letaccept_charset:t=funv->"accept-charset",v(** Attribute "accesskey". *)letaccesskey:t=funv->"accesskey",v(** Attribute "action". *)letaction:t=funv->"action",v(** Attribute "align". *)letalign:t=funv->"align",v(** Attribute "allow". *)letallow:t=funv->"allow",v(** Attribute "alt". *)letalt:t=funv->"alt",v(** Attribute "async". *)letasync:t=funv->"async",v(** Attribute "autocapitalize". *)letautocapitalize:t=funv->"autocapitalize",v(** Attribute "autocomplete". *)letautocomplete:t=funv->"autocomplete",v(** Attribute "autofocus". *)letautofocus:t=funv->"autofocus",v(** Attribute "autoplay". *)letautoplay:t=funv->"autoplay",v(** Attribute "buffered". *)letbuffered:t=funv->"buffered",v(** Attribute "capture". *)letcapture:t=funv->"capture",v(** Attribute "challenge". *)letchallenge:t=funv->"challenge",v(** Attribute "charset". *)letcharset:t=funv->"charset",v(** Attribute "checked". *)letchecked:t=funv->"checked",v(** Attribute "cite". *)letcite:t=funv->"cite",v(** Attribute "class". *)letclass_:t=funv->"class",v(** Attribute "code". *)letcode:t=funv->"code",v(** Attribute "codebase". *)letcodebase:t=funv->"codebase",v(** Attribute "cols". *)letcols:t=funv->"cols",v(** Attribute "colspan". *)letcolspan:t=funv->"colspan",v(** Attribute "content". *)letcontent:t=funv->"content",v(** Attribute "contenteditable". *)letcontenteditable:t=funv->"contenteditable",v(** Attribute "contextmenu". *)letcontextmenu:t=funv->"contextmenu",v(** Attribute "controls". *)letcontrols:t=funv->"controls",v(** Attribute "coords". *)letcoords:t=funv->"coords",v(** Attribute "crossorigin". *)letcrossorigin:t=funv->"crossorigin",v(** Attribute "csp". *)letcsp:t=funv->"csp",v(** Attribute "data". *)letdata:t=funv->"data",v(** Attribute "data-*". *)letdata_star:t=funv->"data-*",v(** Attribute "datetime". *)letdatetime:t=funv->"datetime",v(** Attribute "decoding". *)letdecoding:t=funv->"decoding",v(** Attribute "default". *)letdefault:t=funv->"default",v(** Attribute "defer". *)letdefer:t=funv->"defer",v(** Attribute "dir". *)letdir:t=funv->"dir",v(** Attribute "dirname". *)letdirname:t=funv->"dirname",v(** Attribute "disabled". *)letdisabled:t=funv->"disabled",v(** Attribute "download". *)letdownload:t=funv->"download",v(** Attribute "draggable". *)letdraggable:t=funv->"draggable",v(** Attribute "enctype". *)letenctype:t=funv->"enctype",v(** Attribute "enterkeyhint". *)letenterkeyhint:t=funv->"enterkeyhint",v(** Attribute "for". *)letfor_:t=funv->"for",v(** Attribute "form". *)letform:t=funv->"form",v(** Attribute "formaction". *)letformaction:t=funv->"formaction",v(** Attribute "formenctype". *)letformenctype:t=funv->"formenctype",v(** Attribute "formmethod". *)letformmethod:t=funv->"formmethod",v(** Attribute "formnovalidate". *)letformnovalidate:t=funv->"formnovalidate",v(** Attribute "formtarget". *)letformtarget:t=funv->"formtarget",v(** Attribute "headers". *)letheaders:t=funv->"headers",v(** Attribute "hidden". *)lethidden:t=funv->"hidden",v(** Attribute "high". *)lethigh:t=funv->"high",v(** Attribute "href". *)lethref:t=funv->"href",v(** Attribute "hreflang". *)lethreflang:t=funv->"hreflang",v(** Attribute "http-equiv". *)lethttp_equiv:t=funv->"http-equiv",v(** Attribute "icon". *)leticon:t=funv->"icon",v(** Attribute "id". *)letid:t=funv->"id",v(** Attribute "importance". *)letimportance:t=funv->"importance",v(** Attribute "integrity". *)letintegrity:t=funv->"integrity",v(** Attribute "ismap". *)letismap:t=funv->"ismap",v(** Attribute "itemprop". *)letitemprop:t=funv->"itemprop",v(** Attribute "keytype". *)letkeytype:t=funv->"keytype",v(** Attribute "kind". *)letkind:t=funv->"kind",v(** Attribute "label". *)letlabel:t=funv->"label",v(** Attribute "lang". *)letlang:t=funv->"lang",v(** Attribute "language". *)letlanguage:t=funv->"language",v(** Attribute "list". *)letlist:t=funv->"list",v(** Attribute "loop". *)letloop:t=funv->"loop",v(** Attribute "low". *)letlow:t=funv->"low",v(** Attribute "manifest". *)letmanifest:t=funv->"manifest",v(** Attribute "max". *)letmax:t=funv->"max",v(** Attribute "maxlength". *)letmaxlength:t=funv->"maxlength",v(** Attribute "minlength". *)letminlength:t=funv->"minlength",v(** Attribute "media". *)letmedia:t=funv->"media",v(** Attribute "method". *)letmethod_:t=funv->"method",v(** Attribute "min". *)letmin:t=funv->"min",v(** Attribute "multiple". *)letmultiple:t=funv->"multiple",v(** Attribute "muted". *)letmuted:t=funv->"muted",v(** Attribute "name". *)letname:t=funv->"name",v(** Attribute "novalidate". *)letnovalidate:t=funv->"novalidate",v(** Attribute "open". *)letopen_:t=funv->"open",v(** Attribute "optimum". *)letoptimum:t=funv->"optimum",v(** Attribute "pattern". *)letpattern:t=funv->"pattern",v(** Attribute "ping". *)letping:t=funv->"ping",v(** Attribute "placeholder". *)letplaceholder:t=funv->"placeholder",v(** Attribute "poster". *)letposter:t=funv->"poster",v(** Attribute "preload". *)letpreload:t=funv->"preload",v(** Attribute "radiogroup". *)letradiogroup:t=funv->"radiogroup",v(** Attribute "readonly". *)letreadonly:t=funv->"readonly",v(** Attribute "referrerpolicy". *)letreferrerpolicy:t=funv->"referrerpolicy",v(** Attribute "rel". *)letrel:t=funv->"rel",v(** Attribute "required". *)letrequired:t=funv->"required",v(** Attribute "reversed". *)letreversed:t=funv->"reversed",v(** Attribute "rows". *)letrows:t=funv->"rows",v(** Attribute "rowspan". *)letrowspan:t=funv->"rowspan",v(** Attribute "sandbox". *)letsandbox:t=funv->"sandbox",v(** Attribute "scope". *)letscope:t=funv->"scope",v(** Attribute "scoped". *)letscoped:t=funv->"scoped",v(** Attribute "selected". *)letselected:t=funv->"selected",v(** Attribute "shape". *)letshape:t=funv->"shape",v(** Attribute "size". *)letsize:t=funv->"size",v(** Attribute "sizes". *)letsizes:t=funv->"sizes",v(** Attribute "slot". *)letslot:t=funv->"slot",v(** Attribute "span". *)letspan:t=funv->"span",v(** Attribute "spellcheck". *)letspellcheck:t=funv->"spellcheck",v(** Attribute "src". *)letsrc:t=funv->"src",v(** Attribute "srcdoc". *)letsrcdoc:t=funv->"srcdoc",v(** Attribute "srclang". *)letsrclang:t=funv->"srclang",v(** Attribute "srcset". *)letsrcset:t=funv->"srcset",v(** Attribute "start". *)letstart:t=funv->"start",v(** Attribute "step". *)letstep:t=funv->"step",v(** Attribute "style". *)letstyle:t=funv->"style",v(** Attribute "summary". *)letsummary:t=funv->"summary",v(** Attribute "tabindex". *)lettabindex:t=funv->"tabindex",v(** Attribute "target". *)lettarget:t=funv->"target",v(** Attribute "title". *)lettitle:t=funv->"title",v(** Attribute "translate". *)lettranslate:t=funv->"translate",v(** Attribute "Text". *)lettext:t=funv->"Text",v(** Attribute "type". *)lettype_:t=funv->"type",v(** Attribute "usemap". *)letusemap:t=funv->"usemap",v(** Attribute "value". *)letvalue:t=funv->"value",v(** Attribute "width". *)letwidth:t=funv->"width",v(** Attribute "wrap". *)letwrap:t=funv->"wrap",vend