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) @safe pure nothrow @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 @safe pure nothrow @nogc unittest 68 { 69 assert(`æ`.isIPAVowelPhoneme); 70 assert(!`b`.isIPAVowelPhoneme); 71 } 72 73 bool isIPAConsonantPhoneme(S)(S s) 74 if (isSomeString!S) 75 { 76 import std.algorithm.comparison : among; 77 return cast(bool)s.among!(`b`, `d`, `ð`, `dʒ`, `f`, `ɡ`, `h`, `hw`, `j`, `k`, `l`, `m`, `n`, `ŋ`, `p`, `r`, `s`, `ʃ`, `t`, `θ`, `tʃ`, `w`, `z`, `ʒ`); 78 } 79 80 @safe pure nothrow @nogc unittest 81 { 82 assert(!`a`.isIPAConsonantPhoneme); 83 assert(`b`.isIPAConsonantPhoneme); 84 }