1: <?php
2:
3: declare(strict_types=1);
4:
5: namespace Atk4\Ui;
6:
7: /**
8: * Provides a handy object that generates some amount of random text-filler.
9: */
10: class LoremIpsum extends Text
11: {
12: /**
13: * Specifies amount of filler you need. This value affects number of
14: * paragraphs and amount of text per-paragraph.
15: */
16: public int $size = 3;
17:
18: /** Base amount of words per paragraph. */
19: public int $words = 50;
20:
21: /**
22: * @param array<string, mixed>|int $defaults
23: */
24: public function __construct($defaults = [])
25: {
26: if (is_scalar($defaults)) {
27: $defaults = ['size' => $defaults];
28: }
29:
30: parent::__construct($defaults);
31: }
32:
33: /**
34: * Returns string of LoremIpsum text.
35: *
36: * @return string "Lorem Ipsum" text
37: */
38: public function generateLorem(int $words)
39: {
40: $punctuation = ['. ', '. ', '. ', '. ', '. ', '. ', '. ', '. ', '... ', '! ', '? '];
41:
42: $dictionary = ['abbas', 'abdo', 'abico', 'abigo', 'abluo', 'accumsan',
43: 'acsi', 'ad', 'adipiscing', 'aliquam', 'aliquip', 'amet', 'antehabeo',
44: 'appellatio', 'aptent', 'at', 'augue', 'autem', 'bene', 'blandit',
45: 'brevitas', 'caecus', 'camur', 'capto', 'causa', 'cogo', 'comis',
46: 'commodo', 'commoveo', 'consectetuer', 'consequat', 'conventio', 'cui',
47: 'damnum', 'decet', 'defui', 'diam', 'dignissim', 'distineo', 'dolor',
48: 'dolore', 'dolus', 'duis', 'ea', 'eligo', 'elit', 'enim', 'erat',
49: 'eros', 'esca', 'esse', 'et', 'eu', 'euismod', 'eum', 'ex', 'exerci',
50: 'exputo', 'facilisi', 'facilisis', 'fere', 'feugiat', 'gemino',
51: 'genitus', 'gilvus', 'gravis', 'haero', 'hendrerit', 'hos', 'huic',
52: 'humo', 'iaceo', 'ibidem', 'ideo', 'ille', 'illum', 'immitto',
53: 'importunus', 'imputo', 'in', 'incassum', 'inhibeo', 'interdico',
54: 'iriure', 'iusto', 'iustum', 'jugis', 'jumentum', 'jus', 'laoreet',
55: 'lenis', 'letalis', 'lobortis', 'loquor', 'lucidus', 'luctus', 'ludus',
56: 'luptatum', 'macto', 'magna', 'mauris', 'melior', 'metuo', 'meus',
57: 'minim', 'modo', 'molior', 'mos', 'natu', 'neo', 'neque', 'nibh',
58: 'nimis', 'nisl', 'nobis', 'nostrud', 'nulla', 'nunc', 'nutus', 'obruo',
59: 'occuro', 'odio', 'olim', 'oppeto', 'os', 'pagus', 'pala', 'paratus',
60: 'patria', 'paulatim', 'pecus', 'persto', 'pertineo', 'plaga', 'pneum',
61: 'populus', 'praemitto', 'praesent', 'premo', 'probo', 'proprius',
62: 'quadrum', 'quae', 'qui', 'quia', 'quibus', 'quidem', 'quidne', 'quis',
63: 'ratis', 'refero', 'refoveo', 'roto', 'rusticus', 'saepius',
64: 'sagaciter', 'saluto', 'scisco', 'secundum', 'sed', 'si', 'similis',
65: 'singularis', 'sino', 'sit', 'sudo', 'suscipere', 'suscipit', 'tamen',
66: 'tation', 'te', 'tego', 'tincidunt', 'torqueo', 'tum', 'turpis',
67: 'typicus', 'ulciscor', 'ullamcorper', 'usitas', 'ut', 'utinam',
68: 'utrum', 'uxor', 'valde', 'valetudo', 'validus', 'vel', 'velit',
69: 'veniam', 'venio', 'vereor', 'vero', 'verto', 'vicis', 'vindico',
70: 'virtus', 'voco', 'volutpat', 'vulpes', 'vulputate', 'wisi', 'ymo',
71: 'zelus'];
72:
73: $lorem = '';
74:
75: while ($words > 0) {
76: $sentenceLength = random_int(3, 10);
77:
78: $lorem .= ucfirst($dictionary[array_rand($dictionary)]);
79: for ($i = 1; $i < $sentenceLength; ++$i) {
80: $lorem .= ' ' . $dictionary[array_rand($dictionary)];
81: }
82:
83: $lorem .= $punctuation[array_rand($punctuation)];
84: $words -= $sentenceLength;
85: }
86:
87: return $lorem;
88: }
89:
90: #[\Override]
91: protected function init(): void
92: {
93: parent::init();
94:
95: for ($x = 0; $x < $this->size; ++$x) {
96: $this->addParagraph($this->generateLorem($this->words * $this->size));
97: }
98: }
99: }
100: