Example #1
0
        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);
        }
Example #2
0
        /*
         * 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);
        }