LDAPAccountManager/lam/lib/3rdParty/composer/pear-pear.horde.org/Horde_Support/Horde/Support/Numerizer/Locale/Pt.php

153 lines
4.1 KiB
PHP

<?php
/**
* Copyright 2010-2017 Horde LLC (http://www.horde.org/)
*
* @license http://www.horde.org/licenses/bsd BSD
* @category Horde
* @package Support
*/
/**
* @license http://www.horde.org/licenses/bsd BSD
* @category Horde
* @package Support
*/
class Horde_Support_Numerizer_Locale_Pt extends Horde_Support_Numerizer_Locale_Base
{
public $DIRECT_NUMS = array(
'treze' => '13',
'catorze' => '14',
'quatorze' => '14',
'quinze' => '15',
'dezasseis' => '16',
'dezassete' => '17',
'dezoito' => '18',
'dezanove' => '19',
'um(\W|$)' => '1$1',
'uma(\W|$)' => '1$1',
'dois' => '2',
'duas' => '2',
'tres' => '3',
'quatro' => '4',
'cinco' => '5',
'seis' => '6',
'sete' => '7',
'oito' => '8',
'nove' => '9',
'dez' => '10',
'onze' => '11',
'doze' => '12',
);
public $TEN_PREFIXES = array(
'vinte' => '20',
'trinta' => '30',
'quarenta' => '40',
'cinquenta' => '50',
'sessenta' => '60',
'setenta' => '70',
'oitenta' => '80',
'noventa' => '90',
);
public $BIG_PREFIXES = array(
'cem' => '100',
'mil' => '1000',
'milhao *' => '1000000',
'milhar de *' => '1000000000',
'biliao *' => '1000000000000',
);
public function numerize($string)
{
// preprocess
$string = $this->_splitHyphenateWords($string);
$string = $this->_replaceTenPrefixes($string);
$string = $this->_directReplacements($string);
$string = $this->_replaceBigPrefixes($string);
// $string = $this->_fractionalAddition($string);
return $string;
}
/**
* will mutilate hyphenated-words but shouldn't matter for date extraction
*/
protected function _splitHyphenateWords($string)
{
return preg_replace('/ +|([^\d]) e? ([^d])/', '$1 $2', $string);
}
/**
* easy/direct replacements
*/
protected function _directReplacements($string)
{
foreach ($this->DIRECT_NUMS as $dn => $dn_replacement) {
$string = preg_replace("/$dn/i", $dn_replacement, $string);
}
return $string;
}
/**
* ten, twenty, etc.
*/
protected function _replaceTenPrefixes($string)
{
foreach ($this->TEN_PREFIXES as $tp => $tp_replacement) {
$string = preg_replace_callback(
"/(?:$tp)( *\d(?=[^\d]|\$))*/i",
function ($m) use ($tp_replacement) {
return $tp_replacement + (isset($m[1]) ? (int)$m[1] : 0);
},
$string
);
}
return $string;
}
/**
* hundreds, thousands, millions, etc.
*/
protected function _replaceBigPrefixes($string)
{
foreach ($this->BIG_PREFIXES as $bp => $bp_replacement) {
$string = preg_replace_callback(
'/(\d*) *' . $bp . '(\d?)/i',
function ($m) use ($bp_replacement) {
$factor = (int)$m[1];
if (!$factor) {
$factor = 1;
}
return ($bp_replacement * $factor)
. ($bp_replacement == 100 ? ($m[2] ? 'e' : '') : 'e')
. $m[2];
},
$string);
$string = $this->_andition($string);
}
return $string;
}
protected function _andition($string)
{
while (preg_match('/(\d+)((?: *e *)+)(\d*)(?=\w|$)/i', $string, $sc, PREG_OFFSET_CAPTURE)) {
$string = substr($string, 0, $sc[1][1]) . ((int)$sc[1][0] + (int)$sc[3][0]) . substr($string, $sc[3][1] + strlen($sc[3][0]));
}
return $string;
}
protected function _fractionalAddition($string)
{
return preg_replace_callback(
'/(\d+)(?: | e |-)*/i',
function ($m) {
return (string)((float)$m[1] + 0.5);
},
$string
);
}
}