1 /** International Phonetic Alphabet.
2  */
3 module nxt.ipa;
4 
5 // enum Phoneme : string
6 // {
7 //	 `æ`,
8 //	 `ə`,
9 //	 `ʌ`,
10 //	 `ɜ`,
11 //	 `eə`,
12 //	 `ɜr`,
13 //	 `ɑː`,
14 //	 `aɪ`,
15 //	 `ɑr`,
16 //	 `aʊ`,
17 //	 `b`,
18 //	 `d`,
19 //	 `ð`,
20 //	 `dʒ`,
21 //	 `ɛ`,
22 //	 `eɪ`,
23 //	 `f`,
24 //	 `ɡ`,
25 //	 `h`,
26 //	 `hw`,
27 //	 `iː`,
28 //	 `ɪ`,
29 //	 `j`,
30 //	 `k`,
31 //	 `l`,
32 //	 `m`,
33 //	 `n`,
34 //	 `ŋ`,
35 //	 `ɔː`,
36 //	 `ɔɪ`,
37 //	 `oʊ`,
38 //	 `p`,
39 //	 `r`,
40 //	 `s`,
41 //	 `ʃ`,
42 //	 `t`,
43 //	 `θ`,
44 //	 `tʃ`,
45 //	 `uː`,
46 //	 `ʊ`,
47 //	 `v`,
48 //	 `w`,
49 //	 `z`,
50 //	 `ʒ`,
51 //	 }
52 
53 // size_t countSyllables(Phoneme s) pure nothrow @safe @nogc
54 // {
55 //	 return 0;
56 // }
57 
58 import std.traits : isSomeString;
59 
60 bool isIPAVowelPhoneme(S)(S s)
61 	if (isSomeString!S)
62 {
63 	import std.algorithm.comparison : among;
64 	return cast(bool)s.among!(`æ`, `ə`, `ʌ`, `ɜ`, `eə`, `ɜr`, `ɑː`, `aɪ`, `ɑr`, `aʊ`, `ɛ`, `eɪ`, `iː`, `ɪ`, `ɔː`, `ɔɪ`, `oʊ`, `uː`, `ʊ`);
65 }
66 
67 pure nothrow @safe @nogc unittest {
68 	assert(`æ`.isIPAVowelPhoneme);
69 	assert(!`b`.isIPAVowelPhoneme);
70 }
71 
72 bool isIPAConsonantPhoneme(S)(S s)
73 	if (isSomeString!S)
74 {
75 	import std.algorithm.comparison : among;
76 	return cast(bool)s.among!(`b`, `d`, `ð`, `dʒ`, `f`, `ɡ`, `h`, `hw`, `j`, `k`, `l`, `m`, `n`, `ŋ`, `p`, `r`, `s`, `ʃ`, `t`, `θ`, `tʃ`, `w`, `z`, `ʒ`);
77 }
78 
79 pure nothrow @safe @nogc unittest {
80 	assert(!`a`.isIPAConsonantPhoneme);
81 	assert(`b`.isIPAConsonantPhoneme);
82 }