PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 3.3.1
GiveWP – Donation Plugin and Fundraising Platform v3.3.1
4.16.7.1 4.16.7 4.16.6.1 4.16.6 4.16.5.1 4.16.5 4.16.4 4.16.3 4.16.2 4.16.1 4.16.0 4.15.5 4.15.4 4.15.3 4.15.2 4.15.1 4.15.0 2.3.0 2.3.1 2.3.2 2.30.0 2.31.0 2.31.1 2.32.0 2.33.0 2.33.1 2.33.2 2.33.3 2.33.4 2.33.5 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.5.0 2.5.1 2.5.10 2.5.11 2.5.12 2.5.13 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 2.6.0 2.6.1 2.6.2 2.6.3 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.9.0 2.9.1 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.10.0 3.11.0 3.12.0 3.12.1 3.12.2 3.12.3 3.13.0 3.14.0 3.14.1 3.14.2 3.15.0 3.15.1 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.17.0 3.17.1 3.17.2 3.18.0 3.19.0 3.19.1 3.19.2 3.19.3 3.19.4 3.2.0 3.2.1 3.2.2 3.20.0 3.21.0 3.21.1 3.22.0 3.22.1 3.22.2 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.7.0 3.8.0 3.9.0 4.0.0 4.1.0 4.1.1 4.10.0 4.10.1 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.14.5 4.14.6 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.1 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 trunk 1.9.0 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.2 2.11.3 2.12.0 2.12.1 2.12.2 2.12.3 2.13.0 2.13.1 2.13.2 2.13.3 2.13.4 2.14.0 2.15.0 2.16.0 2.16.1 2.17.0 2.17.1 2.17.3 2.18.0 2.18.1 2.19.1 2.19.2 2.19.3 2.19.4 2.19.5 2.19.6 2.19.7 2.19.8 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.20.0 2.20.1 2.20.2 2.21.0 2.21.1 2.21.2 2.21.3 2.21.4 2.22.0 2.22.1 2.22.2 2.22.3 2.23.0 2.23.1 2.23.2 2.24.0 2.24.1 2.24.2 2.25.0 2.25.1 2.25.2 2.25.3 2.26.0 2.27.0 2.27.1 2.27.2 2.27.3 2.28.0 2.29.0 2.29.1 2.29.2
give / vendor / vendor-prefixed / fakerphp / faker / src / Faker / Provider / Text.php
give / vendor / vendor-prefixed / fakerphp / faker / src / Faker / Provider Last commit date
ar_EG 2 years ago ar_JO 2 years ago ar_SA 2 years ago at_AT 2 years ago bg_BG 2 years ago bn_BD 2 years ago cs_CZ 2 years ago da_DK 2 years ago de_AT 2 years ago de_CH 2 years ago de_DE 2 years ago el_CY 2 years ago el_GR 2 years ago en_AU 2 years ago en_CA 2 years ago en_GB 2 years ago en_HK 2 years ago en_IN 2 years ago en_NG 2 years ago en_NZ 2 years ago en_PH 2 years ago en_SG 2 years ago en_UG 2 years ago en_US 2 years ago en_ZA 2 years ago es_AR 2 years ago es_ES 2 years ago es_PE 2 years ago es_VE 2 years ago et_EE 2 years ago fa_IR 2 years ago fi_FI 2 years ago fr_BE 2 years ago fr_CA 2 years ago fr_CH 2 years ago fr_FR 2 years ago he_IL 2 years ago hr_HR 2 years ago hu_HU 2 years ago hy_AM 2 years ago id_ID 2 years ago is_IS 2 years ago it_CH 2 years ago it_IT 2 years ago ja_JP 2 years ago ka_GE 2 years ago kk_KZ 2 years ago ko_KR 2 years ago lt_LT 2 years ago lv_LV 2 years ago me_ME 2 years ago mn_MN 2 years ago ms_MY 2 years ago nb_NO 2 years ago ne_NP 2 years ago nl_BE 2 years ago nl_NL 2 years ago pl_PL 2 years ago pt_BR 2 years ago pt_PT 2 years ago ro_MD 2 years ago ro_RO 2 years ago ru_RU 2 years ago sk_SK 2 years ago sl_SI 2 years ago sr_Cyrl_RS 2 years ago sr_Latn_RS 2 years ago sr_RS 2 years ago sv_SE 2 years ago th_TH 2 years ago tr_TR 2 years ago uk_UA 2 years ago vi_VN 2 years ago zh_CN 2 years ago zh_TW 2 years ago Address.php 2 years ago Barcode.php 2 years ago Base.php 2 years ago Biased.php 2 years ago Color.php 2 years ago Company.php 2 years ago DateTime.php 2 years ago File.php 2 years ago HtmlLorem.php 2 years ago Image.php 2 years ago Internet.php 2 years ago Lorem.php 2 years ago Medical.php 2 years ago Miscellaneous.php 2 years ago Payment.php 2 years ago Person.php 2 years ago PhoneNumber.php 2 years ago Text.php 2 years ago UserAgent.php 2 years ago Uuid.php 2 years ago
Text.php
209 lines
1 <?php
2 /**
3 * @license MIT
4 *
5 * Modified by impress-org on 23-January-2024 using Strauss.
6 * @see https://github.com/BrianHenryIE/strauss
7 */
8
9 namespace Give\Vendors\Faker\Provider;
10
11 abstract class Text extends Base
12 {
13 protected static $baseText = '';
14 protected static $separator = ' ';
15 protected static $separatorLen = 1;
16 protected $explodedText;
17 protected $consecutiveWords = [];
18 protected static $textStartsWithUppercase = true;
19
20 /**
21 * Generate a text string by the Markov chain algorithm.
22 *
23 * Depending on the $maxNbChars, returns a random valid looking text. The algorithm
24 * generates a weighted table with the specified number of words as the index and the
25 * possible following words as the value.
26 *
27 * @example 'Alice, swallowing down her flamingo, and began by taking the little golden key'
28 *
29 * @param int $maxNbChars Maximum number of characters the text should contain (minimum: 10)
30 * @param int $indexSize Determines how many words are considered for the generation of the next word.
31 * The minimum is 1, and it produces a higher level of randomness, although the
32 * generated text usually doesn't make sense. Higher index sizes (up to 5)
33 * produce more correct text, at the price of less randomness.
34 *
35 * @return string
36 */
37 public function realText($maxNbChars = 200, $indexSize = 2)
38 {
39 return $this->realTextBetween((int) round($maxNbChars * 0.8), $maxNbChars, $indexSize);
40 }
41
42 /**
43 * Generate a text string by the Markov chain algorithm.
44 *
45 * Depending on the $maxNbChars, returns a random valid looking text. The algorithm
46 * generates a weighted table with the specified number of words as the index and the
47 * possible following words as the value.
48 *
49 * @example 'Alice, swallowing down her flamingo, and began by taking the little golden key'
50 *
51 * @param int $minNbChars Minimum number of characters the text should contain (maximum: 8)
52 * @param int $maxNbChars Maximum number of characters the text should contain (minimum: 10)
53 * @param int $indexSize Determines how many words are considered for the generation of the next word.
54 * The minimum is 1, and it produces a higher level of randomness, although the
55 * generated text usually doesn't make sense. Higher index sizes (up to 5)
56 * produce more correct text, at the price of less randomness.
57 *
58 * @return string
59 */
60 public function realTextBetween($minNbChars = 160, $maxNbChars = 200, $indexSize = 2)
61 {
62 if ($minNbChars < 1) {
63 throw new \InvalidArgumentException('minNbChars must be at least 1');
64 }
65
66 if ($maxNbChars < 10) {
67 throw new \InvalidArgumentException('maxNbChars must be at least 10');
68 }
69
70 if ($indexSize < 1) {
71 throw new \InvalidArgumentException('indexSize must be at least 1');
72 }
73
74 if ($indexSize > 5) {
75 throw new \InvalidArgumentException('indexSize must be at most 5');
76 }
77
78 if ($minNbChars >= $maxNbChars) {
79 throw new \InvalidArgumentException('minNbChars must be smaller than maxNbChars');
80 }
81
82 $words = $this->getConsecutiveWords($indexSize);
83 $iterations = 0;
84
85 do {
86 ++$iterations;
87
88 if ($iterations >= 100) {
89 throw new \OverflowException(sprintf('Maximum retries of %d reached without finding a valid real text', $iterations));
90 }
91
92 $result = $this->generateText($maxNbChars, $words);
93 } while (static::strlen($result) <= $minNbChars);
94
95 return $result;
96 }
97
98 /**
99 * @param int $maxNbChars
100 * @param array $words
101 *
102 * @return string
103 */
104 protected function generateText($maxNbChars, $words)
105 {
106 $result = [];
107 $resultLength = 0;
108 // take a random starting point
109 $next = static::randomKey($words);
110
111 while ($resultLength < $maxNbChars && isset($words[$next])) {
112 // fetch a random word to append
113 $word = static::randomElement($words[$next]);
114
115 // calculate next index
116 $currentWords = static::explode($next);
117 $currentWords[] = $word;
118 array_shift($currentWords);
119 $next = static::implode($currentWords);
120
121 // ensure text starts with an uppercase letter
122 if ($resultLength == 0 && !static::validStart($word)) {
123 continue;
124 }
125
126 // append the element
127 $result[] = $word;
128 $resultLength += static::strlen($word) + static::$separatorLen;
129 }
130
131 // remove the element that caused the text to overflow
132 array_pop($result);
133
134 // build result
135 $result = static::implode($result);
136
137 return static::appendEnd($result);
138 }
139
140 protected function getConsecutiveWords($indexSize)
141 {
142 if (!isset($this->consecutiveWords[$indexSize])) {
143 $parts = $this->getExplodedText();
144 $words = [];
145 $index = [];
146
147 for ($i = 0; $i < $indexSize; ++$i) {
148 $index[] = array_shift($parts);
149 }
150
151 for ($i = 0, $count = count($parts); $i < $count; ++$i) {
152 $stringIndex = static::implode($index);
153
154 if (!isset($words[$stringIndex])) {
155 $words[$stringIndex] = [];
156 }
157 $word = $parts[$i];
158 $words[$stringIndex][] = $word;
159 array_shift($index);
160 $index[] = $word;
161 }
162 // cache look up words for performance
163 $this->consecutiveWords[$indexSize] = $words;
164 }
165
166 return $this->consecutiveWords[$indexSize];
167 }
168
169 protected function getExplodedText()
170 {
171 if ($this->explodedText === null) {
172 $this->explodedText = static::explode(preg_replace('/\s+/u', ' ', static::$baseText));
173 }
174
175 return $this->explodedText;
176 }
177
178 protected static function explode($text)
179 {
180 return explode(static::$separator, $text);
181 }
182
183 protected static function implode($words)
184 {
185 return implode(static::$separator, $words);
186 }
187
188 protected static function strlen($text)
189 {
190 return function_exists('mb_strlen') ? mb_strlen($text, 'UTF-8') : strlen($text);
191 }
192
193 protected static function validStart($word)
194 {
195 $isValid = true;
196
197 if (static::$textStartsWithUppercase) {
198 $isValid = preg_match('/^\p{Lu}/u', $word);
199 }
200
201 return $isValid;
202 }
203
204 protected static function appendEnd($text)
205 {
206 return preg_replace("/([ ,-:;\x{2013}\x{2014}]+$)/us", '', $text) . '.';
207 }
208 }
209