diff --git a/lib/src/random_name_generator_base.dart b/lib/src/random_name_generator_base.dart index f61fb80..bfd3a7f 100644 --- a/lib/src/random_name_generator_base.dart +++ b/lib/src/random_name_generator_base.dart @@ -5,7 +5,7 @@ import 'zone.dart'; /// Base class for random name generators class RandomNames { final Zone _zone; - final Random? _random; + final Random _random; /// Creates a new instance of RandomNames that accepts a [Random] instance /// to be used for generating random names allowing to generate names in a @@ -13,8 +13,11 @@ class RandomNames { RandomNames.seeded({ Zone? zone, Random? random, - }) : _random = random, - _zone = zone ?? ([...Zone.all]..shuffle(random)).first; + }) : _random = random ?? Random(), + _zone = zone ?? ([...Zone.all]..shuffle(random)).first { + if (_zone.surnamesW.isEmpty) + _zone.surnamesW = _zone.surnames; + } factory RandomNames([Zone? zone]) => RandomNames.seeded(zone: zone); @@ -35,23 +38,29 @@ class RandomNames { /// Returns a random surname String surname() { + return ([..._zone.surnames, ..._zone.surnamesW]..shuffle(_random)).first; + } + + /// Returns a random surname for a woman + String womanSurname() { + return ([..._zone.surnamesW]..shuffle(_random)).first; + } + + /// Returns a random surname for a man + String manSurname() { return ([..._zone.surnames]..shuffle(_random)).first; } /// Returns a random full name String fullName() { - return _zone.fullNameStructure - .replaceFirst("_S_", surname()) - .replaceFirst("_S_", surname()) - .replaceFirst("_N_", name()) - .replaceFirst("_N_", name()); + return _random.nextBool() ? womanFullName() : manFullName(); } /// Returns a random full name for a woman String womanFullName() { return _zone.fullNameStructure - .replaceFirst("_S_", surname()) - .replaceFirst("_S_", surname()) + .replaceFirst("_S_", womanSurname()) + .replaceFirst("_S_", womanSurname()) .replaceFirst("_N_", womanName()) .replaceFirst("_N_", womanName()); } @@ -59,8 +68,8 @@ class RandomNames { /// Returns a random full name for a man String manFullName() { return _zone.fullNameStructure - .replaceFirst("_S_", surname()) - .replaceFirst("_S_", surname()) + .replaceFirst("_S_", manSurname()) + .replaceFirst("_S_", manSurname()) .replaceFirst("_N_", manName()) .replaceFirst("_N_", manName()); } diff --git a/lib/src/zone.dart b/lib/src/zone.dart index fb6e0f1..5ce844b 100644 --- a/lib/src/zone.dart +++ b/lib/src/zone.dart @@ -36,6 +36,9 @@ abstract class Zone { /// List of surnames List surnames = []; + /// List of surnames in their female variation (which is often the same as the male surname) + List surnamesW = []; + /// List of male first names List namesM = []; @@ -48,9 +51,12 @@ abstract class Zone { String get fullNameStructure => "_N_ _S_"; static Zone catalonia = Catalonia(); + static Zone catalonia_long = Catalonia(twoSurnames: true); static Zone france = France(); static Zone spain = Spain(); + static Zone spain_long = Spain(twoSurnames: true); static Zone us = US(); + static Zone us_long = US(useMiddleNames: true); static Zone uk = UK(); static Zone turkey = Turkey(); static Zone germany = Germany(); diff --git a/lib/src/zones/russia.dart b/lib/src/zones/russia.dart index 5bc0f59..ff18f79 100644 --- a/lib/src/zones/russia.dart +++ b/lib/src/zones/russia.dart @@ -52,11 +52,26 @@ class Russia extends Zone { "Belyaev", "Titov", "Lazarev", - "Morozova", - "Nikitina", + ]; + + surnamesW = [ + "Ivanova", + "Smirnova", + "Kuznetsova", + "Popova", + "Vasilieva", "Petrova", + "Sokolova", + "Mikhailova", + "Novikova", + "Fedorova", + "Morozova", + "Volkova", + "Alekseeva", + "Lebedeva", "Semenova", "Egorova", + "Pavlova", "Kozlova", "Stepanova", "Nikitina", @@ -85,29 +100,6 @@ class Russia extends Zone { "Belyaeva", "Titova", "Lazareva", - "Pavlova", - "Kotova", - "Golubeva", - "Volkova", - "Kuzmina", - "Mironova", - "Konovalova", - "Zaytseva", - "Solovieva", - "Bogdanova", - "Vorobeva", - "Simonova", - "Konstantinova", - "Kharitonova", - "Belyakova", - "Shirokova", - "Sokolnikova", - "Andreeva", - "Yakovleva", - "Gavrilova", - "Belyaeva", - "Titova", - "Lazareva" ]; namesM = [ diff --git a/lib/src/zones/ukraine.dart b/lib/src/zones/ukraine.dart index 79a9b36..d8e6438 100644 --- a/lib/src/zones/ukraine.dart +++ b/lib/src/zones/ukraine.dart @@ -84,7 +84,6 @@ class Ukraine extends Zone { "Rudenko", "Vasylev", "Polishchuk", - "Sokolova", "Mykytenko", "Frolov", "Melnichenko", @@ -108,6 +107,108 @@ class Ukraine extends Zone { "Humeniuk" ]; + surnamesW = [ + "Ivanenko", + "Petrovych", + "Kovalenko", + "Tkachenko", + "Morozova", + "Savchenko", + "Kozlova", + "Shevchenko", + "Stepanova", + "Kovalchuk", + "Oliynyk", + "Kravchenko", + "Melnik", + "Bondarenko", + "Tymoshenko", + "Kozak", + "Yakovych", + "Zaytseva", + "Romanenko", + "Lysenko", + "Fedorova", + "Andriyenko", + "Zakharova", + "Goncharova", + "Dmytruk", + "Chernyshova", + "Prokhorova", + "Semenova", + "Bilyk", + "Makarenko", + "Kononenko", + "Bogdanova", + "Fomin", + "Gavrylova", + "Nikolenko", + "Rusnak", + "Mykhailenko", + "Shapovalova", + "Holovko", + "Shved", + "Doroshenko", + "Kushnir", + "Popovych", + "Kucherenko", + "Karpenko", + "Kucher", + "Zaitseva", + "Klymenko", + "Yurchenko", + "Osipova", + "Boyko", + "Pavlenko", + "Mykolenko", + "Vasylchenko", + "Korol", + "Mosiychuk", + "Lytvynenko", + "Korzh", + "Solovyova", + "Kryvtsova", + "Antonova", + "Danylo", + "Ostapenko", + "Sokolova", + "Oleksyuk", + "Martynenko", + "Kovalenko", + "Ishchenko", + "Zadorozhna", + "Shcherbakova", + "Khomenko", + "Korol", + "Mazur", + "Sereda", + "Kovalchuk", + "Rudenko", + "Vasyleva", + "Polishchuk", + "Mykytenko", + "Frolova", + "Melnichenko", + "Shulga", + "Mazurenko", + "Sydorovych", + "Skrypnyk", + "Ovcharenko", + "Drozd", + "Yemets", + "Panfilova", + "Shcherbak", + "Bykova", + "Kryvda", + "Kurylo", + "Sydorenko", + "Ostapovych", + "Kuznetsova", + "Shevchuk", + "Kupchak", + "Humeniuk" + ]; + namesM = [ "Oleksandr", "Andriy", diff --git a/lib/src/zones/us.dart b/lib/src/zones/us.dart index 256659c..8563d84 100644 --- a/lib/src/zones/us.dart +++ b/lib/src/zones/us.dart @@ -4,7 +4,10 @@ import '../zone.dart'; class US extends Zone { @override String id = "us"; - US() { + bool _useMiddleNames = false; + + US({bool useMiddleNames = false}) { + _useMiddleNames = useMiddleNames; surnames = [ "Smith", "Johnson", @@ -314,4 +317,7 @@ class US extends Zone { "Lori", ]; } + + @override + String get fullNameStructure => _useMiddleNames ? "_N_ _N_ _S_" : "_N_ _S_"; }