summaryrefslogtreecommitdiff
path: root/src/lib/sounds
diff options
context:
space:
mode:
authorSébastien Dailly <sebastien@chimrod.com>2021-08-27 17:20:59 +0200
committerSébastien Dailly <sebastien@chimrod.com>2021-08-27 17:20:59 +0200
commit26faec7a69051f639b50c8e8741f0823c6be52a2 (patch)
treea610d0306bf3e0c84f7993be7c290965fcab1900 /src/lib/sounds
parentc8b49eed4cf92e7d2dd01dce779ef84ccae733eb (diff)
Managed diphtongues
Diffstat (limited to 'src/lib/sounds')
-rw-r--r--src/lib/sounds/sounds.ml67
1 files changed, 51 insertions, 16 deletions
diff --git a/src/lib/sounds/sounds.ml b/src/lib/sounds/sounds.ml
index a2035b7..6126dd4 100644
--- a/src/lib/sounds/sounds.ml
+++ b/src/lib/sounds/sounds.ml
@@ -3,15 +3,18 @@ module type T = sig
type t
val muted : t -> t
- val a : [`Closed | `Opened] -> t
+ val a : t
val e : [`Closed | `Opened] -> t
val eu : [`Closed | `Opened] -> t
val o : [`Closed | `Opened] -> t
val schwa : unit -> t
- val i : [`Closed | `Opened] -> t
+ val i : t
val u : t
+ val u' : t
+ (** Create a diphtongue from a semi-voyel and a voyel *)
+ val diphtongue: t -> t -> t
val nasal: t -> t
@@ -22,6 +25,7 @@ module type T = sig
val t: t
val d: t
val k: t
+ val g: t
val f: t
val s: unit -> t
val sz: unit -> t
@@ -43,7 +47,10 @@ module type T = sig
| None
| SZ
| Voyel_A
+ | Voyel_I
| Voyel_O
+ | SemiVoyel_W
+ | Diphtonge of code * code
val code : t -> code
@@ -58,7 +65,10 @@ module T = struct
| None
| SZ
| Voyel_A
+ | Voyel_I
| Voyel_O
+ | SemiVoyel_W
+ | Diphtonge of code * code
type t =
{ code : code
@@ -79,7 +89,9 @@ module Repr = struct
and o_nasal = "§"
and i = "i"
+ and i_nasal = "5"
and u = "y"
+ and u' = "u"
and p = "p"
and b = "b"
@@ -112,6 +124,7 @@ module S = struct
let is_voyel t = t.kind = Voyel
let is_nasal t = t.nasal
+
let none =
{ repr = ""
; muted = false
@@ -122,20 +135,17 @@ module S = struct
let voyel =
{ none with kind = Voyel }
- let code t = t.code
- let nasal t =
- match t.code with
- | Voyel_A -> { t with repr = Repr.a_nasal ; nasal = true }
- | Voyel_O -> { t with repr = Repr.o_nasal ; nasal = true }
- | _ -> t
+ let diphtongue v1 v2 =
+ { voyel with
+ repr = (v1.repr) ^ (v2.repr)
+ ; code = Diphtonge (v1.code, v2.code)
+ }
- let muted f =
- { none with
- repr = "(" ^ f.repr ^ ")"
- ; muted = true }
- let a _ =
+ let code t = t.code
+
+ let a =
{ voyel with repr = Repr.a ; code = Voyel_A }
let e = function
@@ -153,12 +163,15 @@ module S = struct
let o _ =
{ voyel with repr = Repr.o ; code = Voyel_O }
- let i _ =
- { voyel with repr = Repr.i }
+ let i =
+ { voyel with repr = Repr.i ; code = Voyel_I }
let u =
{ voyel with repr = Repr.u }
+ let u' =
+ { voyel with repr = Repr.u' }
+
let p =
{ none with repr = Repr.p }
@@ -174,6 +187,9 @@ module S = struct
let k =
{ none with repr = Repr.k }
+ let g =
+ { none with repr = Repr.g }
+
let f =
{ none with repr = Repr.f }
@@ -202,7 +218,26 @@ module S = struct
{ none with repr = Repr.r }
let semi_voyel_w =
- { none with repr = Repr.w }
+ { none with
+ repr = Repr.w
+ ; code = SemiVoyel_W}
+
+ let nasal t =
+ match t.code with
+ | Voyel_A -> { t with repr = Repr.a_nasal ; nasal = true }
+ | Voyel_O -> { t with repr = Repr.o_nasal ; nasal = true }
+ | Voyel_I -> { t with repr = Repr.i_nasal ; nasal = true }
+ | Diphtonge (SemiVoyel_W, Voyel_A) ->
+ diphtongue
+ semi_voyel_w
+ { t with repr = Repr.i_nasal ; nasal = true }
+ | _ -> t
+
+ let muted f =
+ { none with
+ repr = "(" ^ f.repr ^ ")"
+ ; muted = true }
+
end
include S