152 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			152 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
//
 | 
						|
// +----------------------------------------------------------------------+
 | 
						|
// | PHP version 4                                                        |
 | 
						|
// +----------------------------------------------------------------------+
 | 
						|
// | Copyright (c) 1997-2003 The PHP Group                                |
 | 
						|
// +----------------------------------------------------------------------+
 | 
						|
// | This source file is subject to version 3.0 of the PHP license,       |
 | 
						|
// | that is bundled with this package in the file LICENSE, and is        |
 | 
						|
// | available at through the world-wide-web at                           |
 | 
						|
// | http://www.php.net/license/3_0.txt.                                  |
 | 
						|
// | If you did not receive a copy of the PHP license and are unable to   |
 | 
						|
// | obtain it through the world-wide-web, please send a note to          |
 | 
						|
// | license@php.net so we can mail you a copy immediately.               |
 | 
						|
// +----------------------------------------------------------------------+
 | 
						|
// | Authors: Piotr Klaban <makler@man.torun.pl>                          |
 | 
						|
// +----------------------------------------------------------------------+
 | 
						|
//
 | 
						|
// $Id: Words.php,v 1.3 2005/03/09 07:29:19 makler Exp $
 | 
						|
//
 | 
						|
 | 
						|
/**
 | 
						|
 * The Numbers_Words class provides method to convert arabic numerals to
 | 
						|
 * words (also with currency name).
 | 
						|
 *
 | 
						|
 * @author Piotr Klaban <makler@man.torun.pl>
 | 
						|
 * @package Numbers_Words
 | 
						|
 */
 | 
						|
 | 
						|
// {{{ Numbers_Words
 | 
						|
 | 
						|
/**
 | 
						|
 * The Numbers_Words class provides method to convert arabic numerals to words.
 | 
						|
 *
 | 
						|
 * @access public
 | 
						|
 * @author Piotr Klaban <makler@man.torun.pl>
 | 
						|
 * @since  PHP 4.2.3
 | 
						|
 * @package Numbers_Words
 | 
						|
 */
 | 
						|
 | 
						|
// This is an obvious static classe, functions should be static too.
 | 
						|
class Numbers_Words
 | 
						|
{
 | 
						|
    // {{{ toWords()
 | 
						|
 | 
						|
    /**
 | 
						|
     * Converts a number to its word representation
 | 
						|
     *
 | 
						|
     * @param  integer $num   An integer between -infinity and infinity inclusive :)
 | 
						|
     *                        that should be converted to a words representation
 | 
						|
     *
 | 
						|
     * @param  string  $locale Language name abbreviation. Optional. Defaults to en_US.
 | 
						|
     *
 | 
						|
     * @return string  The corresponding word representation
 | 
						|
     *
 | 
						|
     * @access public
 | 
						|
     * @author Piotr Klaban <makler@man.torun.pl>
 | 
						|
     * @since  PHP 4.2.3
 | 
						|
     */
 | 
						|
    function toWords($num, $locale = 'en_US') {
 | 
						|
 | 
						|
        include_once("Numbers/Words/lang.${locale}.php");
 | 
						|
 | 
						|
        $classname = "Numbers_Words_${locale}";
 | 
						|
 | 
						|
        if (!class_exists($classname)) {
 | 
						|
            return Numbers_Words::raiseError("Unable to include the Numbers/Words/lang.${locale}.php file");
 | 
						|
        }
 | 
						|
 | 
						|
	$methods = get_class_methods($classname);
 | 
						|
 | 
						|
        if (!in_array('toWords', $methods) && !in_array('towords', $methods)) {
 | 
						|
            return Numbers_Words::raiseError("Unable to find toWords method in '$classname' class");
 | 
						|
        }
 | 
						|
 | 
						|
        @$obj = new $classname;
 | 
						|
 | 
						|
        return trim($obj->toWords($num));
 | 
						|
    }
 | 
						|
    // }}}
 | 
						|
    // {{{ toCurrency()
 | 
						|
    /**
 | 
						|
     * Converts a currency value to word representation (1.02 => one dollar two cents)
 | 
						|
     * If the number has not any fraction part, the "cents" number is omitted. 
 | 
						|
     *
 | 
						|
     * @param  float   $num   A float/integer/string number representing currency value
 | 
						|
     *
 | 
						|
     * @param  string  $locale Language name abbreviation. Optional. Defaults to en_US.
 | 
						|
     *
 | 
						|
     * @param  string  $int_curr International currency symbol
 | 
						|
     *                 as defined by the ISO 4217 standard (three characters).
 | 
						|
     *                 E.g. 'EUR', 'USD', 'PLN'. Optional.
 | 
						|
     *                 Defaults to $def_currency defined in the language class.
 | 
						|
     *
 | 
						|
     * @return string  The corresponding word representation
 | 
						|
     *
 | 
						|
     * @access public
 | 
						|
     * @author Piotr Klaban <makler@man.torun.pl>
 | 
						|
     * @since  PHP 4.2.3
 | 
						|
     */
 | 
						|
    static function toCurrency($num, $locale = 'en_US', $int_curr = '') {
 | 
						|
	$ret = $num;
 | 
						|
 | 
						|
        @include_once("Numbers/Words/lang.${locale}.php");
 | 
						|
 | 
						|
        $classname = "Numbers_Words_${locale}";
 | 
						|
 | 
						|
        if (!class_exists($classname)) {
 | 
						|
            return Numbers_Words::raiseError("Unable to include the Numbers/Words/lang.${locale}.php file");
 | 
						|
        }
 | 
						|
 | 
						|
	$methods = get_class_methods($classname);
 | 
						|
 | 
						|
        if (!in_array('toCurrencyWords', $methods) && !in_array('tocurrencywords', $methods)) {
 | 
						|
            return Numbers_Words::raiseError("Unable to find toCurrencyWords method in '$classname' class");
 | 
						|
        }
 | 
						|
 | 
						|
        @$obj = new $classname;
 | 
						|
 | 
						|
	if (strpos($num, '.') === false)
 | 
						|
	{
 | 
						|
	  $ret      = trim($obj->toCurrencyWords($int_curr, $num));
 | 
						|
	} else {
 | 
						|
	    $currency = explode('.', $num, 2);
 | 
						|
	    /* add leading zero */
 | 
						|
	    if (strlen($currency[1]) == 1) {
 | 
						|
	        $currency[1] .= '0';
 | 
						|
	    }
 | 
						|
            $ret      = trim($obj->toCurrencyWords($int_curr, $currency[0], $currency[1]));
 | 
						|
	}
 | 
						|
	return $ret;
 | 
						|
    }
 | 
						|
    // }}}
 | 
						|
    // {{{ raiseError()
 | 
						|
   /**
 | 
						|
    * Trigger a PEAR error
 | 
						|
    *
 | 
						|
    * To improve performances, the PEAR.php file is included dynamically.
 | 
						|
    *
 | 
						|
    * @param string error message
 | 
						|
    */
 | 
						|
    static function raiseError($msg)
 | 
						|
    {
 | 
						|
        include_once('PEAR.php');
 | 
						|
        return PEAR::raiseError($msg);
 | 
						|
    }
 | 
						|
    // }}}
 | 
						|
}
 | 
						|
 | 
						|
// }}}
 | 
						|
?>
 |