dnd-name-generator/language/languages/elvish/names.py
2023-12-04 21:06:14 -08:00

79 lines
2.4 KiB
Python

from language import defaults, types
from language.languages.elvish import Language
from language.languages.elvish.base import suffixes
PlaceName = types.NameGenerator(
language=Language,
syllables=types.SyllableSet(
(types.Syllable(template="vowel,vowel|consonant,vowel|consonant"), 1.0),
(types.Syllable(template="consonant,vowel|consonant,vowel|consonant"), 0.3),
),
templates=types.NameSet(
(types.NameTemplate("affix,name"), 1.0),
),
affixes=types.WeightedSet(("el", 1.0)),
adjectives=defaults.adjectives,
suffixes=suffixes,
)
class ElvishNameGenerator(types.NameGenerator):
def __init__(self):
super().__init__(
language=Language,
syllables=Language.syllables,
templates=types.NameSet(
(types.NameTemplate("name,affix,surname"), 1.0),
),
affixes=types.equal_weights(["am", "an", "al", "um"], weight=1.0, blank=False),
adjectives=defaults.adjectives,
titles=defaults.titles,
suffixes=suffixes,
)
self.language.minimum_grapheme_count = 2
self.place_generator = PlaceName
def get_surname(self) -> str:
return self.place_generator.name()[0]["name"][0]
class NobleElvishNameGenerator(types.NameGenerator):
def __init__(self):
super().__init__(
language=Language,
syllables=Language.syllables,
templates=types.NameSet(
(types.NameTemplate("name,name,affix,surname"), 1.0),
),
affixes=types.equal_weights(["am", "an", "al", "um"], weight=1.0, blank=False),
adjectives=defaults.adjectives,
titles=defaults.titles,
)
self.language.minimum_grapheme_count = 2
self.place_generator = PlaceName
self.suffixes = types.equal_weights(
[
"ieth",
"ies",
"ier",
"ien",
"iath",
"ias",
"iar",
"ian",
"ioth",
"ios",
"ior",
"ion",
],
1.0,
blank=False
)
def get_surname(self) -> str:
return self.place_generator.name()[0]["name"][0] + self.suffixes.random()
Name = ElvishNameGenerator()
NobleName = NobleElvishNameGenerator()