1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374(*
* core.ml
* -----------
* Copyright : (c) 2019 - 2020, ZAN DoYe <zandoye@gmail.com>
* Licence : MIT
*
* This file is a part of mew_vi.
*)moduleMake(Concurrent:Mew.Concurrent.S)=structmoduleBase=Mew.Make(Modal)(Concurrent)moduleInterpret=Interpret.Make(Concurrent)moduleEdit_action=Edit_actionmoduleVi_action=Vi_actionclasseditstate=objectinheritBase.editstatevalaction_output:Edit_action.tConcurrent.MsgBox.t=Concurrent.MsgBox.create()methodaction_output=action_outputvalconfig=Interpret.Resolver.make_config()methodget_register:string->Interpret.Register.contentoption=state#get_registermethodset_register:string->Interpret.Register.content->unit=state#set_registerinitializerletstatus=letopenInterpret.Resolverin{register=None;count=None}inConcurrent.Thread.async(Interpret.Resolver.interpretconfigstatusoaction_output)endclassstate=letmodes=letopenModeinModes.singletonName.Normal{name=Name.Normal;timeout=None;bindings=Mode.KeyTrie.createNone}inobject(self)inheritBase.statemodesmethodvi_edit=neweditselfvalmutableregisters:Interpret.Register.contentInterpret.RegisterMap.t=Interpret.RegisterMap.emptymethodget_registername=letname=ifname=""then"\""elsenameinletcontent=trySome(Interpret.RegisterMap.findnameregisters)with_->Noneincontentmethodset_registernamecontent=letname=ifname=""then"\""elsenameinregisters<-Interpret.RegisterMap.addnamecontentregistersmethodget_registers=registersmethodset_registersregs=registers<-regsendend