summaryrefslogtreecommitdiff
path: root/src/lib/modifiers/nasal.ml
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/modifiers/nasal.ml')
-rw-r--r--src/lib/modifiers/nasal.ml24
1 files changed, 18 insertions, 6 deletions
diff --git a/src/lib/modifiers/nasal.ml b/src/lib/modifiers/nasal.ml
index b9874c9..fbaa35d 100644
--- a/src/lib/modifiers/nasal.ml
+++ b/src/lib/modifiers/nasal.ml
@@ -1,3 +1,17 @@
+let transform
+ : (module Sounds.T with type t = 'a) -> 'a Sig.consonants option -> 'a Sig.t -> 'a Sig.t
+ = fun (type el) m c init ->
+ let module T = (val m:Sounds.T with type t = el) in
+ let (((v1, v2), _) , _) = init in
+
+ begin match T.nasal v1, T.nasal v2 with
+ | Some t1, Some t2 ->
+ ( ( (t1, t2)
+ , c )
+ , None )
+ | _ -> init
+ end
+
(** The Nasal modifier transform a voyel followed by N and a consonant
into a nasal voyel.
@@ -13,11 +27,9 @@ let process
let is_voyel = T.is_voyel v1 && T.is_voyel v2 in
match ending, is_voyel, opening with
| Some ending, _, _ when T.is_nasal ending ->
- (* Remove the ending consonant, and transform the voyel into
- the nasal form *)
- ( ( (T.nasal v1, T.nasal v2)
- , c )
- , None )
+ transform m c init
+ (* Remove the ending consonant, and transform the voyel into
+ the nasal form *)
| None, false, Some (opening::tl) when T.is_nasal opening ->
(* If there is no voyel here, transform the opening consonant as an
ending consonant for the next syllabus *)
@@ -27,7 +39,7 @@ let process
Sig.opening = tl
; Sig.ending = (Some (Some opening))
}) c in
- ( ( (T.nasal v1, T.nasal v2)
+ ( ( (v1, v2)
, c )
, None )
| _ ->