private Syllable ConstructSyllable(Random rng, bool isInitial, bool isFinal) { Syllable syllable = new Syllable(); if (isInitial) { if (rng.NextDouble() < WordInitialOnsetChance) { syllable.Add(Onsets.SelectRandom()); } } else { if (rng.NextDouble() < WordMedialOnsetChance) { syllable.Add(Onsets.SelectRandom()); } } if (rng.NextDouble() < NucleusChance) { syllable.Add(Nuclei.SelectRandom()); } if (isFinal) { if (rng.NextDouble() < WordFinalCodaChance) { syllable.Add(Codae.SelectRandom()); } } else { if (rng.NextDouble() < WordMedialCodaChance) { syllable.Add(Codae.SelectRandom()); } } return(syllable); }
/* * private Word RemoveForbiddenElements(Word word) * { * for (int syllableIndex = 0; syllableIndex < word.Count; syllableIndex++) * { * Syllable currentSyllable = word[syllableIndex]; * Syllable nextSyllable = null; * if (syllableIndex + 1 < word.Count) * nextSyllable = word[syllableIndex + 1]; * * Syllable newSyllable = new Syllable(currentSyllable); * for (int phonemeIndex = 0; phonemeIndex < currentSyllable.Count; phonemeIndex++) * { * Phoneme currentPhoneme = currentSyllable[phonemeIndex]; * * if (currentPhoneme is Consonant) * if (nextSyllable != null && phonemeIndex == currentSyllable.Count - 1) * if (currentPhoneme == nextSyllable[0]) * if (Geminates == Phonotactics.Forbidden) * { * newSyllable.Remove(currentPhoneme); * } * } * * word[syllableIndex] = newSyllable; * } * * return word; * } */ public Word ConstructLoanword(Word wordToLoan) { Word newWord = new Word(); foreach (Syllable syllable in wordToLoan) { Syllable newSyllable = new Syllable(); foreach (Phoneme phoneme in syllable) { newSyllable.Add(SelectClosestPhoneme(phoneme)); } newWord.Add(newSyllable); } return(newWord); }