123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778(*
* zed_macro.ml
* ------------
* Copyright : (c) 2011, Jeremie Dimino <jeremie@dimino.org>
* Licence : BSD3
*
* This file is a part of Zed, an editor engine.
*)openReacttype'at={recording:boolsignal;set_recording:bool->unit;mutabletmp_macro:'alist;mutablemacro:'alist;count:intsignal;set_count:int->unit;counter:intsignal;set_counter:int->unit;}letcreatemacro=letrecording,set_recording=S.createfalseinletcount,set_count=S.create0inletcounter,set_counter=S.create0in{recording;set_recording;macro;tmp_macro=[];count;set_count;counter;set_counter;}letrecordingr=r.recordingletget_recordingr=S.valuer.recordingletset_recordingrstate=matchstatewith|true->r.tmp_macro<-[];r.set_recordingtrue;r.set_count0;r.set_counter0|false->ifS.valuer.recordingthenbeginr.macro<-List.revr.tmp_macro;r.tmp_macro<-[];r.set_recordingfalse;r.set_count0endletcancelr=ifS.valuer.recordingthenbeginr.tmp_macro<-[];r.set_recordingfalse;r.set_count0endletcountr=r.countletget_countr=S.valuer.countletcounterr=r.counterletget_counterr=S.valuer.counterletset_counterrv=r.set_countervletadd_counterrv=r.set_counter(S.valuer.counter+v)letaddrx=ifS.valuer.recordingthenbeginr.tmp_macro<-x::r.tmp_macro;r.set_count(S.valuer.count+1)endletcontentsr=r.macro