<?php
/**
 * -----------------------------------------------------
 *		TO DO
 * -----------------------------------------------------
 * Precisa analisar também a questão das  palavras  compostas,  onde,  no  português,  na
 * maioria das vezes, a pluralização ocorre no primeiro termo.
 *	
 */
class Inflector{
	/**
	  *	Regras de singularização/pluralização
	  */
	public $rules = array(
		'ão' 	=> 'ões', 
		'ês' 	=> 'eses', 
		'm' 	=> 'ns', 
		'l' 	=> 'is', 
		'r' 	=> 'res', 
		'us' 	=> 'i', 	//campus -> campi
		'x' 	=> 'xes', 
		'z' 	=> 'zes', 
	);

	/**
	  *	Exceções às regras
	  */
	public $exceptions = array(
		'cidadão' 	=> 'cidadãos',
		'mão' 		=> 'mãos',
		'qualquer' 	=> 'quaisquer',
	);

	/**
	 *	Passa uma palavra para o plural
	 *	
	 *	@param  string $word A palavra que deseja ser passada para o plural
	 *	@return string
	 */
	public function pluralize($word){
		//Pertence a alguma exceção?
		if(in_array($word, array_keys($this->exceptions))):
			return $this->exceptions[$word];
		//Não pertence a nenhuma exceção. Mas tem alguma regra?
		else:
			foreach($this->rules as $singular=>$plural):
				if(preg_match("({$singular}$)", $word)):
					return str_replace($singular, $plural, $word);
				endif;
			endforeach;
		endif;
		//Não pertence às exceções, nem às regras.
		return $word . 's';
	}
	
	/**
	 *	Passa uma palavra para o singular
	 *	
	 *	@param  string $word A palavra que deseja ser passada para o singular
	 *	@return string
	 */
	public function singularize($word){
		//Pertence às exceções?
		if(in_array($word, $this->exceptions)):
			$invert = array_flip($this->exceptions);
			return $invert[$word];
		//Não é execeção.. Mas pertence a alguma regra?
		else:
			foreach($this->rules as $singular => $plural):
				if(preg_match("({$plural}$)",$word)):
					return str_replace($plural, $singular, $word);
				endif;
			endforeach;
		endif;
		//Nem é exceção, nem tem regra definida.
		return substr($word, 0, strlen($word) - 1);
	}
	
}
?>