diff options
Diffstat (limited to 'src/lib/repr/anatar.ml')
-rw-r--r-- | src/lib/repr/anatar.ml | 282 |
1 files changed, 282 insertions, 0 deletions
diff --git a/src/lib/repr/anatar.ml b/src/lib/repr/anatar.ml new file mode 100644 index 0000000..1d00266 --- /dev/null +++ b/src/lib/repr/anatar.ml @@ -0,0 +1,282 @@ +module T = Tengwar + +(** Glyph position for the diacritc *) +type position = + | Pos1 + | Pos2 + | Pos3 + | Pos4 + | Lambe (* Position for the Lambe (Theta inside) *) + | Lower_1_2 (* Position for the Harma *) + | Lower_3_1 (* Position for the Calma *) + | Lower_4_2 (* Position for the Thule *) + +type t = position T.t + +let portant = + { T.position = Pos4 + ; T.muted = None + ; T.category = I + ; T.primary = false + ; T.repr = "`" } + +let none = T.Nothing + +let space s = T.Repr s + +let a' = + { T.opened = true + ; T.position = `Above + ; T.app = function + | Pos1 | Lower_1_2 | Lambe -> "#" + | Pos2 -> "E" + | Pos3 | Lower_3_1 -> "D" + | Pos4 | Lower_4_2 -> "C" + } +let a = T.Voyel a' + +let app_e = function + | Pos1 | Lower_1_2 | Lambe -> "$" + | Pos2 -> "R" + | Pos3 | Lower_3_1 -> "F" + | Pos4 | Lower_4_2 -> "V" + +and app_eu = function + | Pos1 | Lower_1_2 | Lambe -> "Ü" + | Pos2 -> "Ý" + | Pos3 | Lower_3_1 -> "Þ" + | Pos4 | Lower_4_2 -> "ß" + +let e_opened = + T.Voyel { opened = true ; position = `Above ; app = app_e } +and e_closed = + T.Voyel { opened = false; position = `Above ; app = app_e } + +and schwa = T.Voyel + { opened = true + ; position = `Below + ; app = function + | Pos1 | Lower_3_1 -> "È" + | Pos2 | Lower_1_2 | Lower_4_2 -> "É" + | Pos3 -> "Ê" + | Pos4 -> "Ë" + | Lambe -> "L" + } + +and eu_opened = T.Voyel { opened = true ; position = `Above ; app = app_eu } +and eu_closed = T.Voyel { opened = false ; position = `Above ; app = app_eu } + +and o' = + { T.opened = true + ; T.position = `Above + ; T.app = function + | Pos1 | Lower_1_2 | Lambe -> "^" + | Pos2 -> "Y" + | Pos3 | Lower_3_1 -> "H" + | Pos4 | Lower_4_2 -> "N" + } + +let o = T.Voyel o' + +and i' = + { T.opened = true + ; T.position = `Above + ; T.app = function + | Pos1 | Lower_1_2 | Lambe -> "%" + | Pos2 -> "T" + | Pos3 | Lower_3_1 -> "G" + | Pos4 | Lower_4_2 -> "B" + } + +let i = T.Voyel i' + +and y' = + { T.opened = true + ; T.position = `Above + ; T.app = function + | Pos1 | Lower_1_2 | Lambe -> "Ø" + | Pos2 -> "Ù" + | Pos3 | Lower_3_1 -> "Ú" + | Pos4 | Lower_4_2 -> "Û" + } + +let y = T.Voyel y' + +and u = T.Voyel + { T.opened = true + ; T.position = `Above + ; T.app = function + | Pos1 | Lower_1_2 | Lambe -> "&" + | Pos2 -> "U" + | Pos3 | Lower_3_1 -> "J" + | Pos4 | Lower_4_2 -> "M" + } + +and p = T.Consonant + { position = Pos2 + ; muted = Some "y" + ; category = II + ; primary = true + ; repr = "q" } + +and b = T.Consonant + { position = Pos1 + ; muted = Some "y" + ; category = II + ; primary = true + ; repr = "w" } + +and t = T.Consonant + { position = Pos2 + ; muted = Some "6" + ; category = I + ; primary = true + ; repr = "1" } + +and d = T.Consonant + { position = Pos1 + ; muted = Some "6" + ; category = I + ; primary = true + ; repr = "2" } + +and k = T.Consonant + { position = Lower_3_1 + ; muted = Some "h" + ; category = III + ; primary = true + ; repr = "a" } + +and g = T.Consonant + { position = Pos1 + ; muted = Some "h" + ; category = III + ; primary = true + ; repr = "s" } + +and f = T.Consonant + { position = Pos3 + ; muted = None + ; category = II + ; primary = true + ; repr = "e" } + +and v = T.Consonant + { position = Pos1 + ; muted = None + ; category = II + ; primary = true + ; repr = "r" } + +and ch = T.Consonant + { position = Lower_1_2 + ; muted = None + ; category = III + ; primary = true + ; repr = "d" } + +and j = T.Consonant + { position = Pos1 + ; muted = None + ; category = III + ; primary = true + ; repr = "f" } + +and s = T.Consonant + { position = Lower_4_2 + ; muted = Some "i" + ; category = I + ; primary = true + ; repr = "3" } + +and z = T.Consonant + { position = Pos1 + ; muted = None + ; category = I + ; primary = true + ; repr = "4" } + +and m = T.Consonant + { position = Pos1 + ; muted = None + ; category = II + ; primary = true + ; repr = "t" } + +and n = T.Consonant + { position = Pos1 + ; muted = None + ; category = I + ; primary = true + ; repr = "5" } + +and gn = T.Consonant + { position = Pos1 + ; muted = None + ; category = III + ; primary = false + ; repr = "b" } + +and ng = T.Consonant + { position = Pos1 + ; muted = None + ; category = III + ; primary = true + ; repr = "g" } + +and r = T.Consonant + { position = Pos2 + ; muted = Some "u" + ; category = I + ; primary = false + ; repr = "7" } + +and semi_voyel_w = T.Consonant + { position = Pos3 + ; muted = None + ; category = II + ; primary = false + ; repr = "." } + +and semi_voyel_y = T.Consonant + { position = Pos1 + ; muted = None + ; category = II + ; primary = false + ; repr = "l" } + +and semi_voyel_u = T.Consonant + { position = Pos2 + ; muted = None + ; category = II + ; primary = false + ; repr = "]" } + +let l = + let default = + { T.position = Lambe + ; T.muted = None + ; T.category = II + ; T.primary = false + ; T.repr = "j" } in + T.Consonant default + +let a_nasal = T.nasal m ng n a' +and o_nasal = T.nasal m ng n o' +and i_nasal = T.nasal m ng n i' +and y_nasal = T.nasal m ng n y' + +let muted + : t -> t + = fun t -> + match t with + | Consonant c -> + begin match c.muted with + | None -> t + | Some s -> Consonant {c with repr = s ; position = Pos2} + end + | _ -> t + +let diphtongue = T.diphtongue + +let fold = T.fold ~portant |