from npc.languages.base import BaseLanguage, WordFactory import random import re class Draconic(BaseLanguage): vowels = ["a'", "aa", "ah", "e'", "ee", "ei", "ey", "i'", "ii", "ir", "o'", "u'", "uu"] consonants = [ 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'n', 'r', 's', 't', 'v', 'x', 'y', 'z', ] syllable_template = ('C', 'V') _invalid_sequences = re.compile( r'[' + ''.join(vowels) + ']{3}|' + r'[' + ''.join(consonants) + ']{4}' ) syllable_weights = [0, 0, 1, 2, 2, 1] minimum_length = 3 def validate_sequence(self, sequence, total_syllables): too_short = len(''.join(sequence)) < self.minimum_length if too_short: return False t = ''.join(sequence) if self._invalid_sequences.match(t): self._logger.debug(f"Invalid sequence: {t}") return False return True class Dragon(Draconic): syllable_template = ('v', 'C', 'V') syllable_weights = [0, 1, 2] vowels = ['a', 'e', 'i', 'o', 'u'] last_vowels = vowels last_consonants = ['th', 'x', 'ss', 'z'] minimum_length = 2 _invalid_sequences = re.compile( r'[' + ''.join(last_vowels) + ']{2}|' + r'[' + ''.join(Draconic.consonants) + ']{2}' ) def names(self): prefix = str(WordFactory(self)) suffix = '' while not self.validate_sequence(suffix, 1): suffix = ''.join([ random.choice(self.last_vowels), random.choice(self.last_consonants), random.choice(['us', 'ux', 'as', 'ax', 'is', 'ix', 'es', 'ex']) ]) return [prefix + suffix] person = names