open Brr open Note open Brr_note let get_element_by_id id = id |> Jv.Id.of_jv |> Jv.to_jstr |> Brr.Document.find_el_by_id Brr.G.document let (let=?) : 'a option -> ('a -> unit) -> unit = fun f opt -> Option.iter opt f let main id phon tengwar = match (Jv.is_none id) with | true -> Console.(error [str "No element with id '%s' found"; id]) | false -> let=? source = get_element_by_id id in let=? phon = get_element_by_id phon in let=? tengwar = get_element_by_id tengwar in let ev = Evr.on_el Ev.input (fun _ -> let value = El.prop El.Prop.value source in let str = Jstr.to_string value in let transcription = Translator.Reader.process str in let res1 = Result.map (fun t-> Sounds.repr (module Repr.Default) t) transcription in let () = match res1 with | Ok response -> El.set_prop El.Prop.value (Jstr.of_string response) phon | Error _err -> () in let res2 = Result.map (fun t-> Sounds.repr (module Repr.Tengwar) t) transcription in let () = match res2 with | Ok response -> El.set_prop El.Prop.value (Jstr.of_string response) tengwar | Error _err -> () in () ) source in match (E.log ev (fun _ -> ())) with | None -> () | Some v -> Logr.hold v let () = let open Jv in let main = obj [| "run", (repr main) |] in set global "lib" main