1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
declare(strict_types = 1); |
4
|
|
|
|
5
|
|
|
namespace DummyGenerator\Core; |
6
|
|
|
|
7
|
|
|
use DummyGenerator\Definitions\Extension\Awareness\GeneratorAwareExtensionInterface; |
8
|
|
|
use DummyGenerator\Definitions\Extension\Awareness\GeneratorAwareExtensionTrait; |
9
|
|
|
use DummyGenerator\Definitions\Extension\Awareness\RandomizerAwareExtensionInterface; |
10
|
|
|
use DummyGenerator\Definitions\Extension\Awareness\RandomizerAwareExtensionTrait; |
11
|
|
|
use DummyGenerator\Definitions\Extension\Awareness\ReplacerAwareExtensionInterface; |
12
|
|
|
use DummyGenerator\Definitions\Extension\Awareness\ReplacerAwareExtensionTrait; |
13
|
|
|
use DummyGenerator\Definitions\Extension\Exception\ExtensionArgumentException; |
14
|
|
|
use DummyGenerator\Definitions\Extension\LoremExtensionInterface; |
15
|
|
|
|
16
|
|
|
class Lorem implements |
17
|
|
|
LoremExtensionInterface, |
18
|
|
|
GeneratorAwareExtensionInterface, |
19
|
|
|
RandomizerAwareExtensionInterface, |
20
|
|
|
ReplacerAwareExtensionInterface |
21
|
|
|
{ |
22
|
|
|
use GeneratorAwareExtensionTrait; |
23
|
|
|
use RandomizerAwareExtensionTrait; |
24
|
|
|
use ReplacerAwareExtensionTrait; |
25
|
|
|
|
26
|
|
|
/** @var string[] */ |
27
|
|
|
protected array $workList = [ |
28
|
|
|
'alias', 'consequatur', 'aut', 'perferendis', 'sit', 'voluptatem', |
29
|
|
|
'accusantium', 'doloremque', 'aperiam', 'eaque', 'ipsa', 'quae', 'ab', |
30
|
|
|
'illo', 'inventore', 'veritatis', 'et', 'quasi', 'architecto', |
31
|
|
|
'beatae', 'vitae', 'dicta', 'sunt', 'explicabo', 'aspernatur', 'aut', |
32
|
|
|
'odit', 'aut', 'fugit', 'sed', 'quia', 'consequuntur', 'magni', |
33
|
|
|
'dolores', 'eos', 'qui', 'ratione', 'voluptatem', 'sequi', 'nesciunt', |
34
|
|
|
'neque', 'dolorem', 'ipsum', 'quia', 'dolor', 'sit', 'amet', |
35
|
|
|
'consectetur', 'adipisci', 'velit', 'sed', 'quia', 'non', 'numquam', |
36
|
|
|
'eius', 'modi', 'tempora', 'incidunt', 'ut', 'labore', 'et', 'dolore', |
37
|
|
|
'magnam', 'aliquam', 'quaerat', 'voluptatem', 'ut', 'enim', 'ad', |
38
|
|
|
'minima', 'veniam', 'quis', 'nostrum', 'exercitationem', 'ullam', |
39
|
|
|
'corporis', 'nemo', 'enim', 'ipsam', 'voluptatem', 'quia', 'voluptas', |
40
|
|
|
'sit', 'suscipit', 'laboriosam', 'nisi', 'ut', 'aliquid', 'ex', 'ea', |
41
|
|
|
'commodi', 'consequatur', 'quis', 'autem', 'vel', 'eum', 'iure', |
42
|
|
|
'reprehenderit', 'qui', 'in', 'ea', 'voluptate', 'velit', 'esse', |
43
|
|
|
'quam', 'nihil', 'molestiae', 'et', 'iusto', 'odio', 'dignissimos', |
44
|
|
|
'ducimus', 'qui', 'blanditiis', 'praesentium', 'laudantium', 'totam', |
45
|
|
|
'rem', 'voluptatum', 'deleniti', 'atque', 'corrupti', 'quos', |
46
|
|
|
'dolores', 'et', 'quas', 'molestias', 'excepturi', 'sint', |
47
|
|
|
'occaecati', 'cupiditate', 'non', 'provident', 'sed', 'ut', |
48
|
|
|
'perspiciatis', 'unde', 'omnis', 'iste', 'natus', 'error', |
49
|
|
|
'similique', 'sunt', 'in', 'culpa', 'qui', 'officia', 'deserunt', |
50
|
|
|
'mollitia', 'animi', 'id', 'est', 'laborum', 'et', 'dolorum', 'fuga', |
51
|
|
|
'et', 'harum', 'quidem', 'rerum', 'facilis', 'est', 'et', 'expedita', |
52
|
|
|
'distinctio', 'nam', 'libero', 'tempore', 'cum', 'soluta', 'nobis', |
53
|
|
|
'est', 'eligendi', 'optio', 'cumque', 'nihil', 'impedit', 'quo', |
54
|
|
|
'porro', 'quisquam', 'est', 'qui', 'minus', 'id', 'quod', 'maxime', |
55
|
|
|
'placeat', 'facere', 'possimus', 'omnis', 'voluptas', 'assumenda', |
56
|
|
|
'est', 'omnis', 'dolor', 'repellendus', 'temporibus', 'autem', |
57
|
|
|
'quibusdam', 'et', 'aut', 'consequatur', 'vel', 'illum', 'qui', |
58
|
|
|
'dolorem', 'eum', 'fugiat', 'quo', 'voluptas', 'nulla', 'pariatur', |
59
|
|
|
'at', 'vero', 'eos', 'et', 'accusamus', 'officiis', 'debitis', 'aut', |
60
|
|
|
'rerum', 'necessitatibus', 'saepe', 'eveniet', 'ut', 'et', |
61
|
|
|
'voluptates', 'repudiandae', 'sint', 'et', 'molestiae', 'non', |
62
|
|
|
'recusandae', 'itaque', 'earum', 'rerum', 'hic', 'tenetur', 'a', |
63
|
|
|
'sapiente', 'delectus', 'ut', 'aut', 'reiciendis', 'voluptatibus', |
64
|
|
|
'maiores', 'doloribus', 'asperiores', 'repellat', |
65
|
|
|
]; |
66
|
|
|
|
67
|
10 |
|
public function word(): string |
68
|
|
|
{ |
69
|
10 |
|
return $this->randomizer->randomElement($this->workList); |
70
|
|
|
} |
71
|
|
|
|
72
|
8 |
|
public function words(int $wordCount = 3): array |
73
|
|
|
{ |
74
|
8 |
|
$words = []; |
75
|
8 |
|
for ($i = 0; $i < $wordCount; $i++) { |
76
|
8 |
|
$words[] = $this->word(); |
77
|
|
|
} |
78
|
|
|
|
79
|
8 |
|
return $words; |
80
|
|
|
} |
81
|
|
|
|
82
|
5 |
|
public function sentence(int $wordCount = 6, bool $variableWordCount = true): string |
83
|
|
|
{ |
84
|
5 |
|
if ($wordCount <= 0) { |
85
|
|
|
throw new ExtensionArgumentException('$wordCount should be at least 1'); |
86
|
|
|
} |
87
|
|
|
|
88
|
5 |
|
if ($variableWordCount === true) { |
89
|
4 |
|
$wordCount = $this->randomizeNumberOfElements($wordCount); |
90
|
|
|
} |
91
|
|
|
|
92
|
5 |
|
$words = $this->words($wordCount); |
93
|
5 |
|
$words[0] = ucwords($words[0]); |
94
|
|
|
|
95
|
5 |
|
return implode(' ', $words) . '.'; |
96
|
|
|
} |
97
|
|
|
|
98
|
3 |
|
public function sentences(int $sentenceCount = 3): array |
99
|
|
|
{ |
100
|
3 |
|
$sentences = []; |
101
|
3 |
|
for ($i = 0; $i < $sentenceCount; ++$i) { |
102
|
3 |
|
$sentences[] = $this->sentence(); |
103
|
|
|
} |
104
|
|
|
|
105
|
3 |
|
return $sentences; |
106
|
|
|
} |
107
|
|
|
|
108
|
2 |
|
public function paragraph(int $sentenceCount = 3, bool $variableSentenceCount = true): string |
109
|
|
|
{ |
110
|
2 |
|
if ($sentenceCount <= 0) { |
111
|
|
|
throw new ExtensionArgumentException('$sentenceCount should be at least 1'); |
112
|
|
|
} |
113
|
|
|
|
114
|
2 |
|
if ($variableSentenceCount) { |
115
|
1 |
|
$sentenceCount = $this->randomizeNumberOfElements($sentenceCount); |
116
|
|
|
} |
117
|
|
|
|
118
|
2 |
|
return implode(' ', $this->sentences($sentenceCount)); |
119
|
|
|
} |
120
|
|
|
|
121
|
1 |
|
public function paragraphs(int $paragraphCount = 3): array |
122
|
|
|
{ |
123
|
1 |
|
$paragraphs = []; |
124
|
1 |
|
for ($i = 0; $i < $paragraphCount; ++$i) { |
125
|
1 |
|
$paragraphs[] = $this->paragraph(); |
126
|
|
|
} |
127
|
|
|
|
128
|
1 |
|
return $paragraphs; |
129
|
|
|
} |
130
|
|
|
|
131
|
1 |
|
public function text(int $maxCharacters = 200): string |
132
|
|
|
{ |
133
|
1 |
|
if ($maxCharacters < 5) { |
134
|
|
|
throw new ExtensionArgumentException('$maxCharacters can only generate text of at least 5 characters'); |
135
|
|
|
} |
136
|
|
|
|
137
|
1 |
|
$subtype = ($maxCharacters < 100) ? 'sentence' : 'paragraph'; |
138
|
1 |
|
$type = ($maxCharacters < 25) ? 'word' : $subtype; |
139
|
|
|
|
140
|
1 |
|
$text = []; |
141
|
|
|
|
142
|
|
|
do { |
143
|
1 |
|
$size = 0; |
144
|
|
|
|
145
|
|
|
do { |
146
|
1 |
|
$word = ($size ? ' ' : '') . $this->$type(); |
147
|
1 |
|
$text[] = $word; |
148
|
|
|
|
149
|
1 |
|
$size += $this->replacer->strlen($word); |
150
|
1 |
|
} while ($size < $maxCharacters); |
151
|
|
|
|
152
|
1 |
|
array_pop($text); |
153
|
|
|
} while (empty($text)); |
154
|
|
|
|
155
|
1 |
|
if ($type === 'word') { |
156
|
|
|
// capitalize first letter |
157
|
|
|
$text[0] = ucwords($text[0]); |
158
|
|
|
|
159
|
|
|
// end sentence with full stop |
160
|
|
|
$text[count($text) - 1] .= '.'; |
161
|
|
|
} |
162
|
|
|
|
163
|
1 |
|
return implode('', $text); |
164
|
|
|
} |
165
|
|
|
|
166
|
4 |
|
private function randomizeNumberOfElements(int $number): int |
167
|
|
|
{ |
168
|
4 |
|
return (int) ($number * $this->randomizer->getInt(60, 140) / 100) + 1; |
169
|
|
|
} |
170
|
|
|
} |
171
|
|
|
|