123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140(** Extensions to the Cmarkit AST *)openCmarkittypeslide={content:Block.t;title:Inline.tattributedoption}typeBlock.t+=|IncludedofBlock.tattributednode|DivofBlock.tattributednode|Slideofslideattributednode|SlipofBlock.tattributednode|SlipScriptofBlock.Code_block.tattributednode|CarouselofBlock.tlistattributednodetypemedia={uri:Asset.Uri.t;id:string;origin:Cmarkit.Inline.Link.tattributednode;}typeInline.t+=|Imageofmedia|Videoofmedia|Audioofmedia|Pdfofmedia|Hand_drawnofmediamoduleFiles=structtypemode=[`Base64]typet={path:Fpath.t;content:string;used_by:stringlist;mode:mode;}typemap=tFpath.Map.tendtypet={doc:Cmarkit.Doc.t;files:Files.map}moduleFolder=structletblock_ext_defaultfacc=function|Slide(({content=b;title=Some(title,_)},_),_)->letacc=Folder.fold_inlinefacctitleinFolder.fold_blockfaccb|Slide(({content=b;title=None},_),_)|Div((b,_),_)|Included((b,_),_)|Slip((b,_),_)->Folder.fold_blockfaccb|SlipScript_->acc|Carousel((l,_),_)->List.fold_left(funaccx->Folder.fold_blockfaccx)accl|_->assertfalseletinline_ext_defaultfacc=function|Pdf{origin=(l,_),_;uri=_;id=_}|Audio{origin=(l,_),_;uri=_;id=_}|Video{origin=(l,_),_;uri=_;id=_}|Hand_drawn{origin=(l,_),_;uri=_;id=_}|Image{origin=(l,_),_;uri=_;id=_}->Folder.fold_inlinefacc(Cmarkit.Inline.Link.textl)|_->assertfalseletmake~block~inline()=Folder.make~block_ext_default~inline_ext_default~block~inline()endmoduleMapper=structlet(let*)=Option.bindlet(let+)xf=Option.mapfxletblock_ext_defaultm=function|Div((b,attrs),meta)->let*b=Mapper.map_blockmbinletattrs=(Mapper.map_attrsm(fstattrs),sndattrs)inSome(Div((b,attrs),meta))|Included((b,attrs),meta)->let*b=Mapper.map_blockmbinletattrs=(Mapper.map_attrsm(fstattrs),sndattrs)inSome(Included((b,attrs),meta))|Slide(({content=b;title},attrs),meta)->let*b=Mapper.map_blockmbinlettitle=let*title,attrs=titleinlet+inline=Mapper.map_inlinemtitlein(inline,(Mapper.map_attrsm(fstattrs),sndattrs))inletattrs=(Mapper.map_attrsm(fstattrs),sndattrs)inSome(Slide(({content=b;title},attrs),meta))|Slip((b,attrs),meta)->let*b=Mapper.map_blockmbinletattrs=(Mapper.map_attrsm(fstattrs),sndattrs)inSome(Slip((b,attrs),meta))|SlipScript((s,attrs),meta)->letattrs=(Mapper.map_attrsm(fstattrs),sndattrs)inSome(SlipScript((s,attrs),meta))|Carousel((l,attrs),meta)->(letattrs=(Mapper.map_attrsm(fstattrs),sndattrs)inList.filter_map(Mapper.map_blockm)l|>function|[]->None|l->Some(Carousel((l,attrs),meta)))|_->assertfalseletmap_originm((l,(attrs,a_meta)),meta)=letattrs=Mapper.map_attrsmattrsinlettext=Option.value~default:Inline.empty(Mapper.map_inlinem(Cmarkit.Inline.Link.textl))inletreference=Cmarkit.Inline.Link.referencelinletl=Cmarkit.Inline.Link.maketextreferencein((l,(attrs,a_meta)),meta)letmap_mediam{origin;uri;id}=letorigin=map_originmoriginin{origin;uri;id}letinline_ext_defaultm=function|Pdfmedia->letmedia=map_mediammediainSome(Pdfmedia)|Videomedia->letmedia=map_mediammediainSome(Videomedia)|Audiomedia->letmedia=map_mediammediainSome(Audiomedia)|Imagemedia->letmedia=map_mediammediainSome(Imagemedia)|Hand_drawnmedia->letmedia=map_mediammediainSome(Hand_drawnmedia)|_->assertfalseletmake=Mapper.make~block_ext_default~inline_ext_defaultend