<?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;
 
    }
 
 
}
 
?>
 
 |