. */ declare(strict_types=1); namespace Fisharebest\Webtrees\Contracts; use Fisharebest\Webtrees\SurnameTradition\DefaultSurnameTradition; use Fisharebest\Webtrees\SurnameTradition\IcelandicSurnameTradition; use Fisharebest\Webtrees\SurnameTradition\LithuanianSurnameTradition; use Fisharebest\Webtrees\SurnameTradition\MatrilinealSurnameTradition; use Fisharebest\Webtrees\SurnameTradition\PaternalSurnameTradition; use Fisharebest\Webtrees\SurnameTradition\PatrilinealSurnameTradition; use Fisharebest\Webtrees\SurnameTradition\PolishSurnameTradition; use Fisharebest\Webtrees\SurnameTradition\PortugueseSurnameTradition; use Fisharebest\Webtrees\SurnameTradition\SpanishSurnameTradition; use Fisharebest\Webtrees\SurnameTradition\SurnameTraditionInterface; /** * Create a surname tradition. */ interface SurnameTraditionFactoryInterface { public const PATERNAL = 'paternal'; public const PATRILINEAL = 'patrilineal'; public const MATRILINEAL = 'matrilineal'; public const PORTUGUESE = 'portuguese'; public const SPANISH = 'spanish'; public const POLISH = 'polish'; public const LITHUANIAN = 'lithuanian'; public const ICELANDIC = 'icelandic'; public const DEFAULT = ''; /** * A list of supported surname traditions and their names. * * @return array */ public function list(): array; /** * Create a named surname tradition. * * @param string $name * * @return SurnameTraditionInterface */ public function make(string $name): SurnameTraditionInterface; /** * @param string $name * @param SurnameTraditionInterface $surname_tradition * * @return void */ public function register(string $name, SurnameTraditionInterface $surname_tradition): void; }