summaryrefslogtreecommitdiff
path: root/src/js/tengwar.ml
diff options
context:
space:
mode:
Diffstat (limited to 'src/js/tengwar.ml')
-rw-r--r--src/js/tengwar.ml58
1 files changed, 58 insertions, 0 deletions
diff --git a/src/js/tengwar.ml b/src/js/tengwar.ml
new file mode 100644
index 0000000..dd37c2d
--- /dev/null
+++ b/src/js/tengwar.ml
@@ -0,0 +1,58 @@
+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