%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /home/lightco1/luminero.com.au/administrator/components/com_pagebuilder/helpers/
Upload File :
Create Path :
Current File : /home/lightco1/luminero.com.au/administrator/components/com_pagebuilder/helpers/lorem.php

<?php
/**
 * @version    $Id$
 * @package    JSN_PageBuilder
 * @author     JoomlaShine Team <support@joomlashine.com>
 * @copyright  Copyright (C) 2012 JoomlaShine.com. All Rights Reserved.
 * @license    GNU/GPL v2 or later http://www.gnu.org/licenses/gpl-2.0.html
 *
 * Websites: http://www.joomlashine.com
 * Technical Support:  Feedback - http://www.joomlashine.com/contact-us/get-support.html
 */

// No direct access to this file.
defined('_JEXEC') || die('Restricted access');

/**
 * Helper for render lorem text
 *
 * @package  JSN_PageBuilder
 * @since    1.0.0
 */
class JSNPagebuilderHelpersLorem {

	/**
	 * 	Copyright (c) 2009, Mathew Tinsley ( tinsley@tinsology.net )
	 * 	All rights reserved.
	 *
	 * 	Redistribution and use in source and binary forms, with or without
	 * 	modification, are permitted provided that the following conditions are met:
	 * 		* Redistributions of source code must retain the above copyright
	 * 		  notice, this list of conditions and the following disclaimer.
	 * 		* Redistributions in binary form must reproduce the above copyright
	 * 		  notice, this list of conditions and the following disclaimer in the
	 * 		  documentation and/or other materials provided with the distribution.
	 * 		* Neither the name of the organization nor the
	 * 		  names of its contributors may be used to endorse or promote products
	 * 		  derived from this software without specific prior written permission.
	 *
	 * 	THIS SOFTWARE IS PROVIDED BY MATHEW TINSLEY ''AS IS'' AND ANY
	 * 	EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
	 * 	WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
	 * 	DISCLAIMED. IN NO EVENT SHALL <copyright holder> BE LIABLE FOR ANY
	 * 	DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
	 * 	( INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
	 * 	LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION ) HOWEVER CAUSED AND
	 * 	ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
	 * 	( INCLUDING NEGLIGENCE OR OTHERWISE ) ARISING IN ANY WAY OUT OF THE USE OF THIS
	 * 	SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
	 */
	private $words, $wordsPerParagraph, $wordsPerSentence;

	/**
	 * Constructor
	 * 
	 * @param number $wordsPer
	 * 
	 * @return void
	 */
	function __construct( $wordsPer = 100 ) {
		$this->wordsPerParagraph = $wordsPer;
		$this->wordsPerSentence  = 24.460;
		$this->words = array(
			'lorem',
			'ipsum',
			'dolor',
			'sit',
			'amet',
			'consectetur',
			'adipiscing',
			'elit',
			'curabitur',
			'vel',
			'hendrerit',
			'libero',
			'eleifend',
			'blandit',
			'nunc',
			'ornare',
			'odio',
			'ut',
			'orci',
			'gravida',
			'imperdiet',
			'nullam',
			'purus',
			'lacinia',
			'a',
			'pretium',
			'quis',
			'congue',
			'praesent',
			'sagittis',
			'laoreet',
			'auctor',
			'mauris',
			'non',
			'velit',
			'eros',
			'dictum',
			'proin',
			'accumsan',
			'sapien',
			'nec',
			'massa',
			'volutpat',
			'venenatis',
			'sed',
			'eu',
			'molestie',
			'lacus',
			'quisque',
			'porttitor',
			'ligula',
			'dui',
			'mollis',
			'tempus',
			'at',
			'magna',
			'vestibulum',
			'turpis',
			'ac',
			'diam',
			'tincidunt',
			'id',
			'condimentum',
			'enim',
			'sodales',
			'in',
			'hac',
			'habitasse',
			'platea',
			'dictumst',
			'aenean',
			'neque',
			'fusce',
			'augue',
			'leo',
			'eget',
			'semper',
			'mattis',
			'tortor',
			'scelerisque',
			'nulla',
			'interdum',
			'tellus',
			'malesuada',
			'rhoncus',
			'porta',
			'sem',
			'aliquet',
			'et',
			'nam',
			'suspendisse',
			'potenti',
			'vivamus',
			'luctus',
			'fringilla',
			'erat',
			'donec',
			'justo',
			'vehicula',
			'ultricies',
			'varius',
			'ante',
			'primis',
			'faucibus',
			'ultrices',
			'posuere',
			'cubilia',
			'curae',
			'etiam',
			'cursus',
			'aliquam',
			'quam',
			'dapibus',
			'nisl',
			'feugiat',
			'egestas',
			'class',
			'aptent',
			'taciti',
			'sociosqu',
			'ad',
			'litora',
			'torquent',
			'per',
			'conubia',
			'nostra',
			'inceptos',
			'himenaeos',
			'phasellus',
			'nibh',
			'pulvinar',
			'vitae',
			'urna',
			'iaculis',
			'lobortis',
			'nisi',
			'viverra',
			'arcu',
			'morbi',
			'pellentesque',
			'metus',
			'commodo',
			'ut',
			'facilisis',
			'felis',
			'tristique',
			'ullamcorper',
			'placerat',
			'aenean',
			'convallis',
			'sollicitudin',
			'integer',
			'rutrum',
			'duis',
			'est',
			'etiam',
			'bibendum',
			'donec',
			'pharetra',
			'vulputate',
			'maecenas',
			'mi',
			'fermentum',
			'consequat',
			'suscipit',
			'aliquam',
			'habitant',
			'senectus',
			'netus',
			'fames',
			'quisque',
			'euismod',
			'curabitur',
			'lectus',
			'elementum',
			'tempor',
			'risus',
			'cras',					
		);
	}

	/**
	 * Get content 
	 * 
	 * @param unknown $count
	 * @param string $format
	 * @param string $loremipsum
	 * 
	 * @return string|Ambigous <string, multitype:multitype:Ambigous <>  >
	 */
	function get_content( $count, $format = 'html', $loremipsum = true ) {
		$format = strtolower( $format );

		if ( $count <= 0 )
			return '';

		switch ( $format ) {
			case 'txt':
				return $this->get_text( $count, $loremipsum );
			case 'plain':
				return $this->get_plain( $count, $loremipsum );
			default:
				return $this->get_html( $count, $loremipsum );
		}
	}

	/**
	 * Get words
	 * 
	 * @param array $arr
	 * @param number $count
	 * @param string $loremipsum
	 * 
	 * @return void
	 */
	function get_words( &$arr, $count, $loremipsum ) {
		$i = 0;
		if ( $loremipsum ) {
			$i = 2;
			$arr[0] = 'lorem';
			$arr[1] = 'ipsum';
		}

		for ( $i; $i < $count; $i++ ) {
			$index = array_rand( $this->words );
			$word  = $this->words[$index];
			//echo $index . '=>' . $word . '<br />';

			if ( $i > 0 && $arr[$i - 1] == $word )
				$i--;
			else
				$arr[$i] = $word;
		}
	}

	/**
	 * Get plain text
	 * 
	 * @param number $count
	 * @param string $loremipsum
	 * @param string $returnStr
	 * 
	 * @return string|multitype:multitype:Ambigous <>
	 */
	function get_plain( $count, $loremipsum, $returnStr = true ) {
		$words = array();
		$this->get_words( $words, $count, $loremipsum );
		//print_r( $words );

		$delta     = $count;
		$curr  = 0;
		$sentences = array();
		while ( $delta > 0 ) {
			$senSize = $this->gaussian_sentence();
			//echo $curr . '<br />';
			if ( ($delta - $senSize ) < 4)
				$senSize = $delta;

			$delta -= $senSize;

			$sentence = array();
			for ( $i = $curr; $i < ($curr + $senSize ); $i++)
				$sentence[] = $words[$i];

			$this->punctuate( $sentence );
			$curr = $curr + $senSize;
			$sentences[] = $sentence;
		}

		if ( $returnStr ) {
			$output = '';
			foreach ( $sentences as $s )
				foreach ( $s as $w )
					$output .= $w . ' ';

			return $output;
		}
		else
			return $sentences;
	}

	/**
	 * Get text
	 * 
	 * @param number $count
	 * @param string $loremipsum
	 * 
	 * @return string
	 */
	function get_text( $count, $loremipsum ) {
		$sentences  = $this->get_plain( $count, $loremipsum, false );
		$paragraphs = $this->get_paragraph_arr( $sentences );

		$paragraphStr = array();
		foreach ( $paragraphs as $p ) {
			$paragraphStr[] = $this->paragraph_to_string( $p );
		}

		$paragraphStr[0] = "\t" . $paragraphStr[0];
		return implode( "\n\n\t", $paragraphStr );
	}

	/**
	 * Get paragraph array
	 * 
	 * @param array $sentences
	 * 
	 * @return array
	 */
	function get_paragraph_arr( $sentences ) {
		$wordsPer    = $this->wordsPerParagraph;
		$sentenceAvg = $this->wordsPerSentence;
		$total = count( $sentences );

		$paragraphs = array();
		$pCount     = 0;
		$currCount  = 0;
		$curr = array();

		for ( $i = 0; $i < $total; $i++ ) {
			$s = $sentences[$i];
			$currCount += count( $s );
			$curr[]     = $s;
			if ( $currCount >= ( $wordsPer - round( $sentenceAvg / 2.00 ) ) || $i == $total - 1 ) {
				$currCount    = 0;
				$paragraphs[] = $curr;
				$curr = array();
				//print_r( $paragraphs );
			}
			//print_r( $paragraphs );
		}

		return $paragraphs;
	}

	/**
	 * Get lorem text with html format
	 * 
	 * @param number $count
	 * @param string $loremipsum
	 * 
	 * @return string
	 */
	function get_html( $count, $loremipsum ) {
		$sentences  = $this->get_plain( $count, $loremipsum, false );
		$paragraphs = $this->get_paragraph_arr( $sentences );
		//print_r( $paragraphs );

		$paragraphStr = array();
		foreach ( $paragraphs as $p ) {
			$paragraphStr[] = "<p>\n" . $this->paragraph_to_string( $p, true ) . '</p>';
		}

		//add new lines for the sake of clean code
		return implode( "\n", $paragraphStr );
	}

	/**
	 * Convert paragraph to string
	 * 
	 * @param array $paragraph
	 * @param string $htmlCleanCode
	 * 
	 * @return string
	 */
	function paragraph_to_string( $paragraph, $htmlCleanCode = false ) {
		$paragraphStr = '';
		foreach ( $paragraph as $sentence ) {
			foreach ( $sentence as $word )
				$paragraphStr .= $word . ' ';

			if ( $htmlCleanCode )
				$paragraphStr .= "\n";
		}
		return $paragraphStr;
	}

	/**
	 * Inserts commas and periods in the given
	 * word array.
	 * 
	 * @param array $sentence
	 * 
	 * @return string
	 */
	function punctuate( & $sentence ) {
		$count = count( $sentence );
		$sentence[$count - 1] = $sentence[$count - 1] . '.';

		if ( $count < 4 )
			return $sentence;

		$commas = $this->number_of_commas( $count );

		for ( $i = 1; $i <= $commas; $i++ ) {
			$index = ( int ) round( $i * $count / ( $commas + 1 ) );

			if ( $index < ($count - 1 ) && $index > 0 ) {
				$sentence[$index] = $sentence[$index] . ',';
			}
		}
	}

	/**
	 * Determines the number of commas for a
	 * sentence of the given length. Average and
	 * standard deviation are determined superficially
	 * 
	 * @param number $len
	 * 
	 * @return number
	 */
	function number_of_commas( $len ) {
		$avg    = ( float ) log( $len, 6 );
		$stdDev = ( float ) $avg / 6.000;

		return ( int ) round( $this->gauss_ms( $avg, $stdDev ) );
	}

	/**
	 * Returns a number on a gaussian distribution
	 * based on the average word length of an english
	 * sentence.
	 * Statistics Source:
	 * 	http://hearle.nahoo.net/Academic/Maths/Sentence.html
	 * 	Average: 24.46
	 * 	Standard Deviation: 5.08
	 * 
	 * @return number
	 */
	function gaussian_sentence() {
		$avg    = ( float ) 24.460;
		$stdDev = ( float ) 5.080;

		return ( int ) round( $this->gauss_ms( $avg, $stdDev ) );
	}

	/**
	 * compute numbers with a guassian distrobution
	 * Source:
	 * 	http://us.php.net/manual/en/function.rand.php#53784
	 * 
	 * @return number
	 */
	function gauss() {   // N( 0,1 )
		// returns random number with normal distribution:
		//   mean=0
		//   std dev=1
		// auxilary vars
		$x = $this->random_0_1();
		$y = $this->random_0_1();

		// two independent variables with normal distribution N( 0,1 )
		$u = sqrt( -2 * log( $x ) ) * cos( 2 * pi() * $y );
		$v = sqrt( -2 * log( $x ) ) * sin( 2 * pi() * $y );

		// i will return only one, couse only one needed
		return $u;
	}

	/**
	 * Compute numbers with a guassian distrobution
	 * 
	 * @param real $m
	 * @param real $s
	 * 
	 * @return number
	 */
	function gauss_ms( $m = 0.0, $s = 1.0 ) {
		return $this->gauss() * $s + $m;
	}

	/**
	 * Get random number
	 * 
	 * @return number
	 */
	function random_0_1() {
		return ( float ) rand() / ( float ) getrandmax();
	}

}

Zerion Mini Shell 1.0