| 
<?php
/**
 * Lorem ipsum implementation for PHP.
 *
 * @example See file "example.php" for usage examples
 * @author Artur Barseghyan [email protected]
 * @version 0.1
 * @copyright Artur Barseghyan
 * @license GPL
 */
 
 class Lipsum {
 /**
 * Cache of generated lipsum strings. There are 4 separate caches for every
 * type of the lipsum: paragraphs / words / bytes / lists.
 *
 * @var Array
 */
 private $cache = array();
 
 
 /**
 * Allowed what values.
 *
 * @var Array of Strings
 */
 static public $whats = array('words', 'paragraphs', 'lists', 'bytes');
 
 /**
 * Amount of words / paragraphs / lists / bytes
 *
 * @var Int
 */
 private $amount;
 
 
 /**
 * Type of content to be generated: words / paragraphs / lists / bytes
 *
 * @var String
 */
 private $what;
 
 
 /**
 * If set to true, punctuation is added.
 *
 * @var Bool
 */
 private $punctuation = true;
 
 
 /**
 * If set to true, starts with "Lorem ipsum dolor sit amet".
 *
 * @var Bool
 */
 private $start = false;
 
 
 /**
 * If set to true, html tags are shown.
 *
 * @var Bool
 */
 private $tags = false;
 
 
 /**
 * Result of lorem ipsum operation. TODO - probably questionable - may be
 * replaced with $last - last result of lipsum operation.
 *
 * @var String
 */
 private $text;
 
 
 /**
 * Constructor.
 *
 * @param Int $amount
 * @param String $what
 * @param Bool $punctuation
 * @param Bool $tags
 * @param Bool $start
 */
 public function __construct($amount = 3, $what = 'paragraphs', $punctuation = true, $tags = false, $start = false) {
 $this->amount       = (int)trim($amount);
 $this->what         = self::ValidateWhat($what);
 $this->punctuation  = $punctuation;
 $this->tags         = $tags;
 $this->start        = $start;
 }
 
 
 /**
 * Renders another lorem ipsum.
 *
 * @param Bool $stripTags
 * @return String
 */
 public function render($stripTags = false) {
 $this->cache[$this->what][] = $lipsum = self::Generate($this->amount, $this->what, $this->punctuation, $this->tags, $this->start);
 return ($stripTags) ? strip_tags($lipsum) : $lipsum;
 }
 
 
 /**
 * Returns a random number from cache, respectively to the value of $what
 * given.
 *
 * @return String
 */
 public function random($what = 'paragraphs', $punctuation = true, $tags = false, $start = false) {
 $what = self::ValidateWhat($what);
 return isset($this->cache[$what]) ? self::Finalize($this->cache[$what][rand(0, count($this->cache[$what]) - 1)]) : null;
 }
 
 
 /**
 * Generates lorem ipsum string.
 *
 * @param Int $amount
 * @param String $what
 * @param Bool $punctuation
 * @param Bool $tags
 * @param Bool $start
 * @return String
 */
 static public function Generate($amount = 3, $what = 'paragraph', $punctuation = true, $tags = false, $start = false) {
 // Simple validation
 $amount       = (int)trim($amount);
 $what         = self::ValidateWhat($what);
 
 // Getting raw xml output
 $lipsumRawXml = @implode('', @file('http://www.lipsum.com/feed/xml?amount=' . $amount . '&what=' . $what . ($start ? '&start=yes' : '')));
 
 // Making an object of raw xml data
 $lipsumXml = simplexml_load_string($lipsumRawXml);
 
 // Performing last operations
 $lipsum = isset($lipsumXml->lipsum) ? self::Finalize($lipsumXml->lipsum, $what, $punctuation, $tags, $start) : null;
 
 return $lipsum;
 }
 
 
 /**
 * Finalizes the output.
 *
 * @param String $string
 * @param String $what
 * @param Bool $punctuation
 * @param Bool $tags
 * @param Bool $start
 * @return String
 */
 static public function Finalize($lipsum, $what = 'paragraph', $punctuation = true, $tags = false, $start = false) {
 $lipsum = (string)$lipsum;
 
 $what = self::ValidateWhat($what);
 
 if ($tags) :
 // If tags set to true, we shall add appropriate tags to paragraphs
 // generated. They are separated by PHP_EOL in the $lipsum
 // variable.
 
 switch($what) :
 case 'paragraphs' :
 $lipsum = self::AddTags($lipsum, 'p');
 break;
 case 'lists' :
 $lipsum = self::AddTags($lipsum, 'li', 'ul');
 break;
 case 'words' :
 $lipsum = self::AddTags($lipsum, '');
 break;
 endswitch;
 endif;
 
 if ($punctuation) :
 $lipsum = self::AddPunctuation($lipsum);
 endif;
 
 return $lipsum;
 }
 
 
 /**
 * Adds tags.
 *
 * @param String $lipsum
 * @param String $tag
 * @param String $parentTag
 */
 static public function AddTags($lipsum, $tag, $parentTag = '') {
 $tags = array();
 $lines = explode("\n", $lipsum);
 $taggedLipsum = '';
 
 $openTag = '';
 $closeTag = '';
 
 if (trim($tag)) :
 $openTag = "<$tag>";
 $closeTag = "</$tag>";
 endif;
 
 foreach ($lines as $line) :
 $taggedLipsum .= $openTag . $line . $closeTag;
 endforeach;
 
 if (trim($parentTag)) :
 $taggedLipsum = "<$parentTag>$taggedLipsum</$parentTag>";
 endif;
 
 return $taggedLipsum;
 }
 
 
 /**
 * Adds punctuation. TODO - finish.
 *
 * @param String $string
 * @return String
 */
 static public function AddPunctuation($lipsum) {
 return $lipsum;
 }
 
 
 /**
 * Validates $what.
 *
 * @param String $what
 * @return String
 */
 static public function ValidateWhat($what) {
 $what = trim($what);
 if (in_array($what, self::$whats)) :
 return $what;
 else :
 return 'paragraphs';
 endif;
 }
 
 
 /**
 * Sets amount of $what to generate.
 *
 * @param Int $amount
 */
 public function setAmount($amount) {
 $this->amount = (int)trim($amount);
 return $this;
 }
 
 
 /**
 * Sets tag output to the given value.
 *
 * @param Bool $tags
 */
 public function setTags($tags) {
 $this->tags = $tags;
 return $this;
 }
 
 
 /**
 * Sets $what.
 *
 * @param String $what
 */
 public function setWhat($what) {
 $this->what = self::ValidateWhat($what);
 return $this;
 }
 
 /**
 * Sets $punctuation to the given value.
 *
 * @param Bool $punctuation
 */
 public function setPunctuation($punctuation) {
 $this->punctuation = $punctuation;
 return $this;
 }
 
 }
 ?>
 |