diff options
author | Sébastien Dailly <sebastien@chimrod.com> | 2021-08-27 14:37:24 +0200 |
---|---|---|
committer | Sébastien Dailly <sebastien@chimrod.com> | 2021-08-27 14:37:24 +0200 |
commit | c8b49eed4cf92e7d2dd01dce779ef84ccae733eb (patch) | |
tree | 753547fc766a616e9c47aa78b32f047e73e7a7ef /src/lib/sounds | |
parent | 65d5990607e9542aa847ec7cb684afd3ffdedb8f (diff) |
Splitted modifiers in own library
Diffstat (limited to 'src/lib/sounds')
-rw-r--r-- | src/lib/sounds/dune | 6 | ||||
-rw-r--r-- | src/lib/sounds/sounds.ml | 208 |
2 files changed, 214 insertions, 0 deletions
diff --git a/src/lib/sounds/dune b/src/lib/sounds/dune new file mode 100644 index 0000000..56c6909 --- /dev/null +++ b/src/lib/sounds/dune @@ -0,0 +1,6 @@ +(library + (name + sounds + ) + + ) diff --git a/src/lib/sounds/sounds.ml b/src/lib/sounds/sounds.ml new file mode 100644 index 0000000..a2035b7 --- /dev/null +++ b/src/lib/sounds/sounds.ml @@ -0,0 +1,208 @@ +module type T = sig + + type t + val muted : t -> t + + val a : [`Closed | `Opened] -> 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 u : t + + + val nasal: t -> t + + val none: t + + val p: t + val b: t + val t: t + val d: t + val k: t + val f: t + val s: unit -> t + val sz: unit -> t + val ch: unit -> t + val z: unit -> t + + val n: t + val m: t + + val r: unit -> t + val l: unit -> t + + val semi_voyel_w: t + + val is_voyel : t -> bool + val is_nasal : t -> bool + + type code = + | None + | SZ + | Voyel_A + | Voyel_O + + val code : t -> code + +end + +module T = struct + type kind = + | None + | Voyel + + type code = + | None + | SZ + | Voyel_A + | Voyel_O + + type t = + { code : code + ; repr : string + ; muted : bool + ; kind : kind + ; nasal : bool + } + +end + +module Repr = struct + + let a = "a" + and a_nasal = "@" + + and o = "o" + and o_nasal = "§" + + and i = "i" + and u = "y" + + and p = "p" + and b = "b" + and t = "t" + and d = "d" + + and k = "k" + and g = "g" + + and f = "f" + + and ch = "S" + + and s = "s" + and z = "z" + + and m = "m" + and n = "n" + + and l = "L" + and r = "R" + + and w = "w" +end + +module S = struct + + include T + + let is_voyel t = t.kind = Voyel + let is_nasal t = t.nasal + + let none = + { repr = "" + ; muted = false + ; kind = None + ; nasal = false + ; code = None } + + 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 muted f = + { none with + repr = "(" ^ f.repr ^ ")" + ; muted = true } + + let a _ = + { voyel with repr = Repr.a ; code = Voyel_A } + + let e = function + | `Closed -> { voyel with repr = "e" } + | `Opened -> { voyel with repr = "E" } + + let eu = function + | `Closed -> { voyel with repr = "2" } + | `Opened -> { voyel with repr = "9" } + + + let schwa () = + { voyel with repr = "°" } + + let o _ = + { voyel with repr = Repr.o ; code = Voyel_O } + + let i _ = + { voyel with repr = Repr.i } + + let u = + { voyel with repr = Repr.u } + + let p = + { none with repr = Repr.p } + + let b = + { none with repr = Repr.b } + + let t = + { none with repr = Repr.t } + + let d = + { none with repr = Repr.d } + + let k = + { none with repr = Repr.k } + + let f = + { none with repr = Repr.f } + + let s () = + { none with repr = Repr.s } + + let sz () = + { (s()) with code = SZ } + + let ch () = + { none with repr = Repr.ch } + + let z () = + { none with repr = Repr.z } + + let n = + { none with repr = Repr.n ; nasal = true } + + let m = + { none with repr = Repr.m ; nasal = true } + + let l () = + { none with repr = Repr.l } + + let r () = + { none with repr = Repr.r } + + let semi_voyel_w = + { none with repr = Repr.w } +end + +include S |