From 966f2d26bce9ea6d35a61222f8da557d57a27dab Mon Sep 17 00:00:00 2001 From: Josh Sherman Date: Sat, 13 Sep 2014 08:09:35 -0400 Subject: [PATCH] Code cleanup Converted tabs to spaces, dropped closing ?> and reformatted README to 80 columns. --- README.md | 46 ++- src/LoremIpsum.php | 705 +++++++++++++++++++-------------------- tests/LoremIpsumTest.php | 201 ++++++----- 3 files changed, 487 insertions(+), 465 deletions(-) diff --git a/README.md b/README.md index 2d19435..0d45865 100644 --- a/README.md +++ b/README.md @@ -10,23 +10,40 @@ [packagist]: https://packagist.org/packages/joshtronic/php-loremipsum [gittip]: https://www.gittip.com/joshtronic/ -Lorem ipsum generator in PHP without dependencies. Compatible with PHP 5.3+ as well as HHVM. +Lorem ipsum generator in PHP without dependencies. Compatible with PHP 5.3+ as +well as HHVM. ## Origins -Once upon a time, I was attempting to find a lorem ipsum generator over on [Packagist](https://packagist.org/search/?q=lorem%20ipsum). I was presented with many options, and some of those options were good. Unfortunately, the bulk of those options depended on Symphony or the Zend Framework. This wouldn’t have been a big deal but under the circumstances, I wanted something that was not tightly coupled to these frameworks because I wanted to use the generator in my _own_ framework. +Once upon a time, I was attempting to find a lorem ipsum generator over on +[Packagist](https://packagist.org/search/?q=lorem%20ipsum). I was presented +with many options, and some of those options were good. Unfortunately, the +bulk of those options depended on Symphony or the Zend Framework. This +wouldn’t have been a big deal but under the circumstances, I wanted something +that was not tightly coupled to these frameworks because I wanted to use the +generator in my _own_ framework. -I had decided to use [badcow/lorem-ipsum](https://packagist.org/packages/badcow/lorem-ipsum) because it did not have any dependencies nor did it rely on any external APIs. As I started to use the library, I found that I was going to have to fight with it to get it to do what I wanted. After digging through the code, I realized that I was going to end up gutting most of it to bend it to my will. I know when you overhaul someone’s code the liklihood of them accepting a pull request goes down dramatically, hence building this library while taking cues from it’s predecessor. +I had decided to use +[badcow/lorem-ipsum](https://packagist.org/packages/badcow/lorem-ipsum) +because it did not have any dependencies nor did it rely on any external APIs. +As I started to use the library, I found that I was going to have to fight +with it to get it to do what I wanted. After digging through the code, I +realized that I was going to end up gutting most of it to bend it to my will. +I know when you overhaul someone’s code the liklihood of them accepting a pull +request goes down dramatically, hence building this library while taking cues +from it’s predecessor. -Also, the aforementioned package had a bunch of “setter” and “getter” methods that were grossing me out :P +Also, the aforementioned package had a bunch of “setter” and “getter” methods +that were grossing me out :P ## Installation -The preferred installation method is via `composer`. First add the following to your `composer.json` +The preferred installation method is via `composer`. First add the following +to your `composer.json` ```json "require": { - "joshtronic/php-loremipsum": "dev-master" + "joshtronic/php-loremipsum": "dev-master" } ``` @@ -64,7 +81,8 @@ echo '5 paragraphs: ' . $lipsum->paragraphs(5); ### Wrapping text with HTML tags -If you would like to wrap the generated text with a tag, pass it as the second parameter: +If you would like to wrap the generated text with a tag, pass it as the second +parameter: ```php echo $lipsum->paragraphs(3, 'p'); @@ -77,7 +95,7 @@ Multiple tags can also be specified: ```php echo $lipsum->sentences(3, ['article', 'p']); -// Generptes:

...

...

...

+// Generates:

...

...

...

``` And you can back reference using `$1`: @@ -106,10 +124,16 @@ print_r($lipsum->wordsArray(5), 'li'); ## Assumptions -Instead of having an option as to whether or not a string should start the generated output with “Lorem ipsum dolor sit amet, consectetur adipiscing elit.” a few assumptions are baked in. The first string generated will always start with the traditional “Lorem ipsum…”. Subsequent strings may contain those words but will not explicitly start with them. +Instead of having an option as to whether or not a string should start the +generated output with “Lorem ipsum dolor sit amet, consectetur adipiscing +elit.” a few assumptions are baked in. The first string generated will always +start with the traditional “Lorem ipsum…”. Subsequent strings may contain +those words but will not explicitly start with them. ## Contributing -Suggestions and bug reports are always welcome, but karma points are earned for pull requests. +Suggestions and bug reports are always welcome, but karma points are earned +for pull requests. -Unit tests are required for all contributions. You can run the test suite from the `tests` directory simply by running `phpunit .` +Unit tests are required for all contributions. You can run the test suite +from the `tests` directory simply by running `phpunit .` diff --git a/src/LoremIpsum.php b/src/LoremIpsum.php index 4eb98e8..ab32324 100644 --- a/src/LoremIpsum.php +++ b/src/LoremIpsum.php @@ -18,395 +18,394 @@ namespace joshtronic; class LoremIpsum { - /** - * First - * - * Whether or not we should be starting the string with "Lorem ipsum..." - * - * @access private - * @var boolean - */ - private $first = true; + /** + * First + * + * Whether or not we should be starting the string with "Lorem ipsum..." + * + * @access private + * @var boolean + */ + private $first = true; - /** - * Words - * - * A lorem ipsum vocabulary of sorts. Not a complete list as I'm unsure if - * a complete list exists and if so, where to get it. - * - * @access private - * @var array - */ - public $words = array( - // Lorem ipsum... - 'lorem', 'ipsum', 'dolor', 'sit', - 'amet', 'consectetur', 'adipiscing', 'elit', - // The rest of the vocabulary - 'a', 'ac', 'accumsan', 'ad', - 'aenean', 'aliquam', 'aliquet', 'ante', - 'aptent', 'arcu', 'at', 'auctor', - 'augue', 'bibendum', 'blandit', 'class', - 'commodo', 'condimentum', 'congue', 'consequat', - 'conubia', 'convallis', 'cras', 'cubilia', - 'cum', 'curabitur', 'curae', 'cursus', - 'dapibus', 'diam', 'dictum', 'dictumst', - 'dignissim', 'dis', 'donec', 'dui', - 'duis', 'egestas', 'eget', 'eleifend', - 'elementum', 'enim', 'erat', 'eros', - 'est', 'et', 'etiam', 'eu', - 'euismod', 'facilisi', 'facilisis', 'fames', - 'faucibus', 'felis', 'fermentum', 'feugiat', - 'fringilla', 'fusce', 'gravida', 'habitant', - 'habitasse', 'hac', 'hendrerit', 'himenaeos', - 'iaculis', 'id', 'imperdiet', 'in', - 'inceptos', 'integer', 'interdum', 'justo', - 'lacinia', 'lacus', 'laoreet', 'lectus', - 'leo', 'libero', 'ligula', 'litora', - 'lobortis', 'luctus', 'maecenas', 'magna', - 'magnis', 'malesuada', 'massa', 'mattis', - 'mauris', 'metus', 'mi', 'molestie', - 'mollis', 'montes', 'morbi', 'mus', - 'nam', 'nascetur', 'natoque', 'nec', - 'neque', 'netus', 'nibh', 'nisi', - 'nisl', 'non', 'nostra', 'nulla', - 'nullam', 'nunc', 'odio', 'orci', - 'ornare', 'parturient', 'pellentesque', 'penatibus', - 'per', 'pharetra', 'phasellus', 'placerat', - 'platea', 'porta', 'porttitor', 'posuere', - 'potenti', 'praesent', 'pretium', 'primis', - 'proin', 'pulvinar', 'purus', 'quam', - 'quis', 'quisque', 'rhoncus', 'ridiculus', - 'risus', 'rutrum', 'sagittis', 'sapien', - 'scelerisque', 'sed', 'sem', 'semper', - 'senectus', 'sociis', 'sociosqu', 'sodales', - 'sollicitudin', 'suscipit', 'suspendisse', 'taciti', - 'tellus', 'tempor', 'tempus', 'tincidunt', - 'torquent', 'tortor', 'tristique', 'turpis', - 'ullamcorper', 'ultrices', 'ultricies', 'urna', - 'ut', 'varius', 'vehicula', 'vel', - 'velit', 'venenatis', 'vestibulum', 'vitae', - 'vivamus', 'viverra', 'volutpat', 'vulputate', - ); + /** + * Words + * + * A lorem ipsum vocabulary of sorts. Not a complete list as I'm unsure if + * a complete list exists and if so, where to get it. + * + * @access private + * @var array + */ + public $words = array( + // Lorem ipsum... + 'lorem', 'ipsum', 'dolor', 'sit', + 'amet', 'consectetur', 'adipiscing', 'elit', + // The rest of the vocabulary + 'a', 'ac', 'accumsan', 'ad', + 'aenean', 'aliquam', 'aliquet', 'ante', + 'aptent', 'arcu', 'at', 'auctor', + 'augue', 'bibendum', 'blandit', 'class', + 'commodo', 'condimentum', 'congue', 'consequat', + 'conubia', 'convallis', 'cras', 'cubilia', + 'cum', 'curabitur', 'curae', 'cursus', + 'dapibus', 'diam', 'dictum', 'dictumst', + 'dignissim', 'dis', 'donec', 'dui', + 'duis', 'egestas', 'eget', 'eleifend', + 'elementum', 'enim', 'erat', 'eros', + 'est', 'et', 'etiam', 'eu', + 'euismod', 'facilisi', 'facilisis', 'fames', + 'faucibus', 'felis', 'fermentum', 'feugiat', + 'fringilla', 'fusce', 'gravida', 'habitant', + 'habitasse', 'hac', 'hendrerit', 'himenaeos', + 'iaculis', 'id', 'imperdiet', 'in', + 'inceptos', 'integer', 'interdum', 'justo', + 'lacinia', 'lacus', 'laoreet', 'lectus', + 'leo', 'libero', 'ligula', 'litora', + 'lobortis', 'luctus', 'maecenas', 'magna', + 'magnis', 'malesuada', 'massa', 'mattis', + 'mauris', 'metus', 'mi', 'molestie', + 'mollis', 'montes', 'morbi', 'mus', + 'nam', 'nascetur', 'natoque', 'nec', + 'neque', 'netus', 'nibh', 'nisi', + 'nisl', 'non', 'nostra', 'nulla', + 'nullam', 'nunc', 'odio', 'orci', + 'ornare', 'parturient', 'pellentesque', 'penatibus', + 'per', 'pharetra', 'phasellus', 'placerat', + 'platea', 'porta', 'porttitor', 'posuere', + 'potenti', 'praesent', 'pretium', 'primis', + 'proin', 'pulvinar', 'purus', 'quam', + 'quis', 'quisque', 'rhoncus', 'ridiculus', + 'risus', 'rutrum', 'sagittis', 'sapien', + 'scelerisque', 'sed', 'sem', 'semper', + 'senectus', 'sociis', 'sociosqu', 'sodales', + 'sollicitudin', 'suscipit', 'suspendisse', 'taciti', + 'tellus', 'tempor', 'tempus', 'tincidunt', + 'torquent', 'tortor', 'tristique', 'turpis', + 'ullamcorper', 'ultrices', 'ultricies', 'urna', + 'ut', 'varius', 'vehicula', 'vel', + 'velit', 'venenatis', 'vestibulum', 'vitae', + 'vivamus', 'viverra', 'volutpat', 'vulputate', + ); - /** - * Word - * - * Generates a single word of lorem ipsum. - * - * @access public - * @param mixed $tags string or array of HTML tags to wrap output with - * @return string generated lorem ipsum word - */ - public function word($tags = false) - { - return $this->words(1, $tags); - } + /** + * Word + * + * Generates a single word of lorem ipsum. + * + * @access public + * @param mixed $tags string or array of HTML tags to wrap output with + * @return string generated lorem ipsum word + */ + public function word($tags = false) + { + return $this->words(1, $tags); + } - /** - * Words Array - * - * Generates an array of lorem ipsum words. - * - * @access public - * @param integer $count how many words to generate - * @param mixed $tags string or array of HTML tags to wrap output with - * @return array generated lorem ipsum words - */ - public function wordsArray($count = 1, $tags = false) - { - return $this->words($count, $tags, true); - } + /** + * Words Array + * + * Generates an array of lorem ipsum words. + * + * @access public + * @param integer $count how many words to generate + * @param mixed $tags string or array of HTML tags to wrap output with + * @return array generated lorem ipsum words + */ + public function wordsArray($count = 1, $tags = false) + { + return $this->words($count, $tags, true); + } - /** - * Words - * - * Generates words of lorem ipsum. - * - * @access public - * @param integer $count how many words to generate - * @param mixed $tags string or array of HTML tags to wrap output with - * @param boolean $array whether an array or a string should be returned - * @return mixed string or array of generated lorem ipsum words - */ - public function words($count = 1, $tags = false, $array = false) - { - $words = array(); - $word_count = 0; + /** + * Words + * + * Generates words of lorem ipsum. + * + * @access public + * @param integer $count how many words to generate + * @param mixed $tags string or array of HTML tags to wrap output with + * @param boolean $array whether an array or a string should be returned + * @return mixed string or array of generated lorem ipsum words + */ + public function words($count = 1, $tags = false, $array = false) + { + $words = array(); + $word_count = 0; - // Shuffles and appends the word list to compensate for count - // arguments that exceed the size of our vocabulary list - while ($word_count < $count) - { - $shuffle = true; + // Shuffles and appends the word list to compensate for count + // arguments that exceed the size of our vocabulary list + while ($word_count < $count) + { + $shuffle = true; - while ($shuffle) - { - $this->shuffle(); + while ($shuffle) + { + $this->shuffle(); - // Checks that the last word of the list and the first word of - // the list that's about to be appended are not the same - if (!$word_count || $words[$word_count - 1] != $this->words[0]) - { - $words = array_merge($words, $this->words); - $word_count = count($words); - $shuffle = false; - } - } - } + // Checks that the last word of the list and the first word of + // the list that's about to be appended are not the same + if (!$word_count || $words[$word_count - 1] != $this->words[0]) + { + $words = array_merge($words, $this->words); + $word_count = count($words); + $shuffle = false; + } + } + } - $words = array_slice($words, 0, $count); + $words = array_slice($words, 0, $count); - return $this->output($words, $tags, $array); - } + return $this->output($words, $tags, $array); + } - /** - * Sentence - * - * Generates a full sentence of lorem ipsum. - * - * @access public - * @param mixed $tags string or array of HTML tags to wrap output with - * @return string generated lorem ipsum sentence - */ - public function sentence($tags = false) - { - return $this->sentences(1, $tags); - } + /** + * Sentence + * + * Generates a full sentence of lorem ipsum. + * + * @access public + * @param mixed $tags string or array of HTML tags to wrap output with + * @return string generated lorem ipsum sentence + */ + public function sentence($tags = false) + { + return $this->sentences(1, $tags); + } - /** - * Sentences Array - * - * Generates an array of lorem ipsum sentences. - * - * @access public - * @param integer $count how many sentences to generate - * @param mixed $tags string or array of HTML tags to wrap output with - * @return array generated lorem ipsum sentences - */ - public function sentencesArray($count = 1, $tags = false) - { - return $this->sentences($count, $tags, true); - } + /** + * Sentences Array + * + * Generates an array of lorem ipsum sentences. + * + * @access public + * @param integer $count how many sentences to generate + * @param mixed $tags string or array of HTML tags to wrap output with + * @return array generated lorem ipsum sentences + */ + public function sentencesArray($count = 1, $tags = false) + { + return $this->sentences($count, $tags, true); + } - /** - * Sentences - * - * Generates sentences of lorem ipsum. - * - * @access public - * @param integer $count how many sentences to generate - * @param mixed $tags string or array of HTML tags to wrap output with - * @param boolean $array whether an array or a string should be returned - * @return mixed string or array of generated lorem ipsum sentences - */ - public function sentences($count = 1, $tags = false, $array = false) - { - $sentences = array(); + /** + * Sentences + * + * Generates sentences of lorem ipsum. + * + * @access public + * @param integer $count how many sentences to generate + * @param mixed $tags string or array of HTML tags to wrap output with + * @param boolean $array whether an array or a string should be returned + * @return mixed string or array of generated lorem ipsum sentences + */ + public function sentences($count = 1, $tags = false, $array = false) + { + $sentences = array(); - for ($i = 0; $i < $count; $i++) - { - $sentences[] = $this->wordsArray($this->gauss(24.46, 5.08)); - } + for ($i = 0; $i < $count; $i++) + { + $sentences[] = $this->wordsArray($this->gauss(24.46, 5.08)); + } - $this->punctuate($sentences); + $this->punctuate($sentences); - return $this->output($sentences, $tags, $array); - } + return $this->output($sentences, $tags, $array); + } - /** - * Paragraph - * - * Generates a full paragraph of lorem ipsum. - * - * @access public - * @param mixed $tags string or array of HTML tags to wrap output with - * @return string generated lorem ipsum paragraph - */ - public function paragraph($tags = false) - { - return $this->paragraphs(1, $tags); - } + /** + * Paragraph + * + * Generates a full paragraph of lorem ipsum. + * + * @access public + * @param mixed $tags string or array of HTML tags to wrap output with + * @return string generated lorem ipsum paragraph + */ + public function paragraph($tags = false) + { + return $this->paragraphs(1, $tags); + } - /** - * Paragraph Array - * - * Generates an array of lorem ipsum paragraphs. - * - * @access public - * @param integer $count how many paragraphs to generate - * @param mixed $tags string or array of HTML tags to wrap output with - * @return array generated lorem ipsum paragraphs - */ - public function paragraphsArray($count = 1, $tags = false) - { - return $this->paragraphs($count, $tags, true); - } + /** + * Paragraph Array + * + * Generates an array of lorem ipsum paragraphs. + * + * @access public + * @param integer $count how many paragraphs to generate + * @param mixed $tags string or array of HTML tags to wrap output with + * @return array generated lorem ipsum paragraphs + */ + public function paragraphsArray($count = 1, $tags = false) + { + return $this->paragraphs($count, $tags, true); + } - /** - * Paragraphss - * - * Generates paragraphs of lorem ipsum. - * - * @access public - * @param integer $count how many paragraphs to generate - * @param mixed $tags string or array of HTML tags to wrap output with - * @param boolean $array whether an array or a string should be returned - * @return mixed string or array of generated lorem ipsum paragraphs - */ - public function paragraphs($count = 1, $tags = false, $array = false) - { - $paragraphs = array(); + /** + * Paragraphss + * + * Generates paragraphs of lorem ipsum. + * + * @access public + * @param integer $count how many paragraphs to generate + * @param mixed $tags string or array of HTML tags to wrap output with + * @param boolean $array whether an array or a string should be returned + * @return mixed string or array of generated lorem ipsum paragraphs + */ + public function paragraphs($count = 1, $tags = false, $array = false) + { + $paragraphs = array(); - for ($i = 0; $i < $count; $i++) - { - $paragraphs[] = $this->sentences($this->gauss(5.8, 1.93)); - } + for ($i = 0; $i < $count; $i++) + { + $paragraphs[] = $this->sentences($this->gauss(5.8, 1.93)); + } - return $this->output($paragraphs, $tags, $array, "\n\n"); - } + return $this->output($paragraphs, $tags, $array, "\n\n"); + } - /** - * Gaussian Distribution - * - * This is some smart kid stuff. I went ahead and combined the N(0,1) logic - * with the N(m,s) logic into this single function. Used to calculate the - * number of words in a sentence, the number of sentences in a paragraph - * and the distribution of commas in a sentence. - * - * @access private - * @param double $mean average value - * @param double $std_dev stadnard deviation - * @return double calculated distribution - */ - private function gauss($mean, $std_dev) - { - $x = mt_rand() / mt_getrandmax(); - $y = mt_rand() / mt_getrandmax(); - $z = sqrt(-2 * log($x)) * cos(2 * pi() * $y); + /** + * Gaussian Distribution + * + * This is some smart kid stuff. I went ahead and combined the N(0,1) logic + * with the N(m,s) logic into this single function. Used to calculate the + * number of words in a sentence, the number of sentences in a paragraph + * and the distribution of commas in a sentence. + * + * @access private + * @param double $mean average value + * @param double $std_dev stadnard deviation + * @return double calculated distribution + */ + private function gauss($mean, $std_dev) + { + $x = mt_rand() / mt_getrandmax(); + $y = mt_rand() / mt_getrandmax(); + $z = sqrt(-2 * log($x)) * cos(2 * pi() * $y); - return $z * $std_dev + $mean; - } + return $z * $std_dev + $mean; + } - /** - * Shuffle - * - * Shuffles the words, forcing "Lorem ipsum..." at the beginning if it is - * the first time we are generating the text. - * - * @access private - */ - private function shuffle() - { - if ($this->first) - { - $this->first = array_slice($this->words, 0, 8); - $this->words = array_slice($this->words, 8); + /** + * Shuffle + * + * Shuffles the words, forcing "Lorem ipsum..." at the beginning if it is + * the first time we are generating the text. + * + * @access private + */ + private function shuffle() + { + if ($this->first) + { + $this->first = array_slice($this->words, 0, 8); + $this->words = array_slice($this->words, 8); - shuffle($this->words); + shuffle($this->words); - $this->words = $this->first + $this->words; + $this->words = $this->first + $this->words; - $this->first = false; - } - else - { - shuffle($this->words); - } - } + $this->first = false; + } + else + { + shuffle($this->words); + } + } - /** - * Punctuate - * - * Applies punctuation to a sentence. This includes a period at the end, - * the injection of commas as well as capitalizing the first letter of the - * first word of the sentence. - * - * @access private - * @param array $sentences the sentences we would like to punctuate - */ - private function punctuate(&$sentences) - { - foreach ($sentences as $key => $sentence) - { - $words = count($sentence); + /** + * Punctuate + * + * Applies punctuation to a sentence. This includes a period at the end, + * the injection of commas as well as capitalizing the first letter of the + * first word of the sentence. + * + * @access private + * @param array $sentences the sentences we would like to punctuate + */ + private function punctuate(&$sentences) + { + foreach ($sentences as $key => $sentence) + { + $words = count($sentence); - // Only worry about commas on sentences longer than 4 words - if ($words > 4) - { - $mean = log($words, 6); - $std_dev = $mean / 6; - $commas = round($this->gauss($mean, $std_dev)); + // Only worry about commas on sentences longer than 4 words + if ($words > 4) + { + $mean = log($words, 6); + $std_dev = $mean / 6; + $commas = round($this->gauss($mean, $std_dev)); - for ($i = 1; $i <= $commas; $i++) - { - $word = round($i * $words / ($commas + 1)); + for ($i = 1; $i <= $commas; $i++) + { + $word = round($i * $words / ($commas + 1)); - if ($word < ($words - 1) && $word > 0) - { - $sentence[$word] .= ','; - } - } - } + if ($word < ($words - 1) && $word > 0) + { + $sentence[$word] .= ','; + } + } + } - $sentences[$key] = ucfirst(implode(' ', $sentence) . '.'); - } - } + $sentences[$key] = ucfirst(implode(' ', $sentence) . '.'); + } + } - /** - * Output - * - * Does the rest of the processing of the strings. This includes wrapping - * the strings in HTML tags, handling transformations with the ability of - * back referencing and determining if the passed array should be converted - * into a string or not. - * - * @access private - * @param array $strings an array of generated strings - * @param mixed $tags string or array of HTML tags to wrap output with - * @param boolean $array whether an array or a string should be returned + /** + * Output + * + * Does the rest of the processing of the strings. This includes wrapping + * the strings in HTML tags, handling transformations with the ability of + * back referencing and determining if the passed array should be converted + * into a string or not. + * + * @access private + * @param array $strings an array of generated strings + * @param mixed $tags string or array of HTML tags to wrap output with + * @param boolean $array whether an array or a string should be returned * @param string $delimiter the string to use when calling implode() - * @return mixed string or array of generated lorem ipsum text - */ - private function output($strings, $tags, $array, $delimiter = ' ') - { - if ($tags) - { - if (!is_array($tags)) - { - $tags = array($tags); - } - else - { - // Flips the array so we can work from the inside out - $tags = array_reverse($tags); - } + * @return mixed string or array of generated lorem ipsum text + */ + private function output($strings, $tags, $array, $delimiter = ' ') + { + if ($tags) + { + if (!is_array($tags)) + { + $tags = array($tags); + } + else + { + // Flips the array so we can work from the inside out + $tags = array_reverse($tags); + } - foreach ($strings as $key => $string) - { - foreach ($tags as $tag) - { - // Detects / applies back reference - if ($tag[0] == '<') - { - $string = str_replace('$1', $string, $tag); - } - else - { - $string = sprintf('<%1$s>%2$s', $tag, $string); - } + foreach ($strings as $key => $string) + { + foreach ($tags as $tag) + { + // Detects / applies back reference + if ($tag[0] == '<') + { + $string = str_replace('$1', $string, $tag); + } + else + { + $string = sprintf('<%1$s>%2$s', $tag, $string); + } - $strings[$key] = $string; - } - } - } + $strings[$key] = $string; + } + } + } - if (!$array) - { - $strings = implode($delimiter, $strings); - } + if (!$array) + { + $strings = implode($delimiter, $strings); + } - return $strings; - } + return $strings; + } } -?> diff --git a/tests/LoremIpsumTest.php b/tests/LoremIpsumTest.php index 36f78f5..e503bf4 100644 --- a/tests/LoremIpsumTest.php +++ b/tests/LoremIpsumTest.php @@ -4,125 +4,124 @@ require_once '../src/LoremIpsum.php'; class LoremIpsumTest extends PHPUnit_Framework_TestCase { - private $lipsum; + private $lipsum; - public function setUp() - { - $this->lipsum = new joshtronic\LoremIpsum(); - } + public function setUp() + { + $this->lipsum = new joshtronic\LoremIpsum(); + } - public function testWord() - { - $this->assertRegExp('/^[a-z]+$/i', $this->lipsum->word()); - } + public function testWord() + { + $this->assertRegExp('/^[a-z]+$/i', $this->lipsum->word()); + } - public function testWords() - { - $this->assertRegExp( - '/^[a-z]+ [a-z]+ [a-z]+$/i', - $this->lipsum->words(3) - ); - } + public function testWords() + { + $this->assertRegExp( + '/^[a-z]+ [a-z]+ [a-z]+$/i', + $this->lipsum->words(3) + ); + } - public function testWordsArray() - { - $words = $this->lipsum->wordsArray(3); - $this->assertTrue(is_array($words)); - $this->assertCount(3, $words); + public function testWordsArray() + { + $words = $this->lipsum->wordsArray(3); + $this->assertTrue(is_array($words)); + $this->assertCount(3, $words); - foreach ($words as $word) - { - $this->assertRegExp('/^[a-z]+$/i', $word); - } - } + foreach ($words as $word) + { + $this->assertRegExp('/^[a-z]+$/i', $word); + } + } - public function testWordsExceedingVocab() - { - $this->assertCount(500, $this->lipsum->wordsArray(500)); - } + public function testWordsExceedingVocab() + { + $this->assertCount(500, $this->lipsum->wordsArray(500)); + } - public function testSentence() - { - $this->assertRegExp('/^[a-z, ]+\.$/i', $this->lipsum->sentence()); - } + public function testSentence() + { + $this->assertRegExp('/^[a-z, ]+\.$/i', $this->lipsum->sentence()); + } - public function testSentences() - { - $this->assertRegExp('/^[a-z, ]+\. [a-z, ]+\. [a-z, ]+\.$/i', $this->lipsum->sentences(3)); - } + public function testSentences() + { + $this->assertRegExp('/^[a-z, ]+\. [a-z, ]+\. [a-z, ]+\.$/i', $this->lipsum->sentences(3)); + } - public function testSentencesArray() - { - $sentences = $this->lipsum->sentencesArray(3); - $this->assertTrue(is_array($sentences)); - $this->assertCount(3, $sentences); + public function testSentencesArray() + { + $sentences = $this->lipsum->sentencesArray(3); + $this->assertTrue(is_array($sentences)); + $this->assertCount(3, $sentences); - foreach ($sentences as $sentence) - { - $this->assertRegExp('/^[a-z, ]+\.$/i', $sentence); - } - } + foreach ($sentences as $sentence) + { + $this->assertRegExp('/^[a-z, ]+\.$/i', $sentence); + } + } - public function testParagraph() - { - $this->assertRegExp('/^([a-z, ]+\.)+$/i', $this->lipsum->paragraph()); - } + public function testParagraph() + { + $this->assertRegExp('/^([a-z, ]+\.)+$/i', $this->lipsum->paragraph()); + } - public function testParagraphs() - { - $this->assertRegExp( - '/^([a-z, ]+\.)+\n\n([a-z, ]+\.)+\n\n([a-z, ]+\.)+$/i', - $this->lipsum->paragraphs(3) - ); - } + public function testParagraphs() + { + $this->assertRegExp( + '/^([a-z, ]+\.)+\n\n([a-z, ]+\.)+\n\n([a-z, ]+\.)+$/i', + $this->lipsum->paragraphs(3) + ); + } - public function testParagraphsArray() - { - $paragraphs = $this->lipsum->paragraphsArray(3); - $this->assertTrue(is_array($paragraphs)); - $this->assertCount(3, $paragraphs); + public function testParagraphsArray() + { + $paragraphs = $this->lipsum->paragraphsArray(3); + $this->assertTrue(is_array($paragraphs)); + $this->assertCount(3, $paragraphs); - foreach ($paragraphs as $paragraph) - { - $this->assertRegExp('/^([a-z, ]+\.)+$/i', $paragraph); - } - } + foreach ($paragraphs as $paragraph) + { + $this->assertRegExp('/^([a-z, ]+\.)+$/i', $paragraph); + } + } - public function testMarkupString() - { - $this->assertRegExp( - '/^
  • [a-z]+<\/li>$/i', - $this->lipsum->word('li') - ); - } + public function testMarkupString() + { + $this->assertRegExp( + '/^
  • [a-z]+<\/li>$/i', + $this->lipsum->word('li') + ); + } - public function testMarkupArray() - { - $this->assertRegExp( - '/^

    [a-z]+<\/p><\/div>$/i', - $this->lipsum->word(array('div', 'p')) - ); - } + public function testMarkupArray() + { + $this->assertRegExp( + '/^

    [a-z]+<\/p><\/div>$/i', + $this->lipsum->word(array('div', 'p')) + ); + } - public function testMarkupBackReference() - { - $this->assertRegExp( - '/^

  • [a-z]+<\/a><\/li>$/i', - $this->lipsum->word('
  • $1
  • ') - ); - } + public function testMarkupBackReference() + { + $this->assertRegExp( + '/^
  • [a-z]+<\/a><\/li>$/i', + $this->lipsum->word('
  • $1
  • ') + ); + } - public function testMarkupArrayReturn() - { - $words = $this->lipsum->wordsArray(3, 'li'); - $this->assertTrue(is_array($words)); - $this->assertCount(3, $words); + public function testMarkupArrayReturn() + { + $words = $this->lipsum->wordsArray(3, 'li'); + $this->assertTrue(is_array($words)); + $this->assertCount(3, $words); - foreach ($words as $word) - { - $this->assertRegExp('/^
  • [a-z]+<\/li>$/i', $word); - } - } + foreach ($words as $word) + { + $this->assertRegExp('/^
  • [a-z]+<\/li>$/i', $word); + } + } } -?>