diff options
| author | Bharat Mediratta <bharat@menalto.com> | 2009-05-27 15:11:53 -0700 | 
|---|---|---|
| committer | Bharat Mediratta <bharat@menalto.com> | 2009-05-27 15:11:53 -0700 | 
| commit | 12fe58d997d2066dc362fd393a18b4e5da190513 (patch) | |
| tree | 3ad8e5afb77829e1541ec96d86785760d65c04ac /system/helpers/inflector.php | |
| parent | 00f47d4ddddcd1902db817018dd79ac01bcc8e82 (diff) | |
Rename 'kohana' to 'system' to conform to the Kohana filesystem layout.  I'm comfortable with us not clearly drawing the distinction about the fact that it's Kohana.
Diffstat (limited to 'system/helpers/inflector.php')
| -rw-r--r-- | system/helpers/inflector.php | 193 | 
1 files changed, 193 insertions, 0 deletions
| diff --git a/system/helpers/inflector.php b/system/helpers/inflector.php new file mode 100644 index 00000000..1e4fee23 --- /dev/null +++ b/system/helpers/inflector.php @@ -0,0 +1,193 @@ +<?php defined('SYSPATH') OR die('No direct access allowed.'); +/** + * Inflector helper class. + * + * $Id: inflector.php 4072 2009-03-13 17:20:38Z jheathco $ + * + * @package    Core + * @author     Kohana Team + * @copyright  (c) 2007-2008 Kohana Team + * @license    http://kohanaphp.com/license.html + */ +class inflector_Core { + +	// Cached inflections +	protected static $cache = array(); + +	// Uncountable and irregular words +	protected static $uncountable; +	protected static $irregular; + +	/** +	 * Checks if a word is defined as uncountable. +	 * +	 * @param   string   word to check +	 * @return  boolean +	 */ +	public static function uncountable($str) +	{ +		if (inflector::$uncountable === NULL) +		{ +			// Cache uncountables +			inflector::$uncountable = Kohana::config('inflector.uncountable'); + +			// Make uncountables mirroed +			inflector::$uncountable = array_combine(inflector::$uncountable, inflector::$uncountable); +		} + +		return isset(inflector::$uncountable[strtolower($str)]); +	} + +	/** +	 * Makes a plural word singular. +	 * +	 * @param   string   word to singularize +	 * @param   integer  number of things +	 * @return  string +	 */ +	public static function singular($str, $count = NULL) +	{ +		// Remove garbage +		$str = strtolower(trim($str)); + +		if (is_string($count)) +		{ +			// Convert to integer when using a digit string +			$count = (int) $count; +		} + +		// Do nothing with a single count +		if ($count === 0 OR $count > 1) +			return $str; + +		// Cache key name +		$key = 'singular_'.$str.$count; + +		if (isset(inflector::$cache[$key])) +			return inflector::$cache[$key]; + +		if (inflector::uncountable($str)) +			return inflector::$cache[$key] = $str; + +		if (empty(inflector::$irregular)) +		{ +			// Cache irregular words +			inflector::$irregular = Kohana::config('inflector.irregular'); +		} + +		if ($irregular = array_search($str, inflector::$irregular)) +		{ +			$str = $irregular; +		} +		elseif (preg_match('/[sxz]es$/', $str) OR preg_match('/[^aeioudgkprt]hes$/', $str)) +		{ +			// Remove "es" +			$str = substr($str, 0, -2); +		} +		elseif (preg_match('/[^aeiou]ies$/', $str)) +		{ +			$str = substr($str, 0, -3).'y'; +		} +		elseif (substr($str, -1) === 's' AND substr($str, -2) !== 'ss') +		{ +			$str = substr($str, 0, -1); +		} + +		return inflector::$cache[$key] = $str; +	} + +	/** +	 * Makes a singular word plural. +	 * +	 * @param   string  word to pluralize +	 * @return  string +	 */ +	public static function plural($str, $count = NULL) +	{ +		// Remove garbage +		$str = strtolower(trim($str)); + +		if (is_string($count)) +		{ +			// Convert to integer when using a digit string +			$count = (int) $count; +		} + +		// Do nothing with singular +		if ($count === 1) +			return $str; + +		// Cache key name +		$key = 'plural_'.$str.$count; + +		if (isset(inflector::$cache[$key])) +			return inflector::$cache[$key]; + +		if (inflector::uncountable($str)) +			return inflector::$cache[$key] = $str; + +		if (empty(inflector::$irregular)) +		{ +			// Cache irregular words +			inflector::$irregular = Kohana::config('inflector.irregular'); +		} + +		if (isset(inflector::$irregular[$str])) +		{ +			$str = inflector::$irregular[$str]; +		} +		elseif (preg_match('/[sxz]$/', $str) OR preg_match('/[^aeioudgkprt]h$/', $str)) +		{ +			$str .= 'es'; +		} +		elseif (preg_match('/[^aeiou]y$/', $str)) +		{ +			// Change "y" to "ies" +			$str = substr_replace($str, 'ies', -1); +		} +		else +		{ +			$str .= 's'; +		} + +		// Set the cache and return +		return inflector::$cache[$key] = $str; +	} + +	/** +	 * Makes a phrase camel case. +	 * +	 * @param   string  phrase to camelize +	 * @return  string +	 */ +	public static function camelize($str) +	{ +		$str = 'x'.strtolower(trim($str)); +		$str = ucwords(preg_replace('/[\s_]+/', ' ', $str)); + +		return substr(str_replace(' ', '', $str), 1); +	} + +	/** +	 * Makes a phrase underscored instead of spaced. +	 * +	 * @param   string  phrase to underscore +	 * @return  string +	 */ +	public static function underscore($str) +	{ +		return preg_replace('/\s+/', '_', trim($str)); +	} + +	/** +	 * Makes an underscored or dashed phrase human-reable. +	 * +	 * @param   string  phrase to make human-reable +	 * @return  string +	 */ +	public static function humanize($str) +	{ +		return preg_replace('/[_-]+/', ' ', trim($str)); +	} + +} // End inflector
\ No newline at end of file | 
