protected function _getExceptions() { $oPerson = Factory::create('Person', $this->_oString->getLocale()); $aParticles = $oPerson->particles(); $aExceptions = array(); if ($aParticles) { $aExceptions = array('`(?<![[:alnum:]])(' . implode('|', $aParticles) . ')(?![[:alnum:]])`i' => self::LOWER_CASE); } return $aExceptions; }
protected function _setCase($sInputString, $cCase) { $sModifier = $this->_m(); switch ($cCase) { case self::INITIAL_CASE: $sOutputString = $sInputString; break; case self::UPPER_CASE: $sOutputString = mb_strtoupper($sInputString, $this->_oString->getEncoding()); break; case self::LOWER_CASE: $sOutputString = mb_strtolower($sInputString, $this->_oString->getEncoding()); break; case self::SNAKE_CASE: $sLoweredString = mb_strtolower($sInputString, $this->_oString->getEncoding()); $sUnderscoredLoweredString = preg_replace('`([[:punct:][:space:]]+)`' . $sModifier, '_', $sLoweredString); $sOutputString = preg_replace('`^_|_$`', '', $sUnderscoredLoweredString); break; case self::CAPITALIZE_CASE: $sEncoding = $this->_oString->getEncoding(); $sLoweredString = mb_strtolower($sInputString, $this->_oString->getEncoding()); $sOutputString = preg_replace_callback('`(' . Regex::word() . ')`' . $sModifier, function (&$aWord) use($sEncoding) { $sFirstLetter = mb_strtoupper(Encoding::substr($aWord[1], $sEncoding, 0, 1), $sEncoding); $sEndingWord = Encoding::substr($aWord[1], $sEncoding, 1); return $sFirstLetter . $sEndingWord; }, $sLoweredString); break; case self::TITLE_CASE: // Mise en majuscule de la première lettre de chaque mot $sCapitalizedString = $this->_setCase($sInputString, self::CAPITALIZE_CASE); // Mise en minuscule de la première lettre des petits mots de liaison $sEncoding = $this->_oString->getEncoding(); $oLocale = Factory::create('Base', $this->_oString->getLocale()); $sPatternLowerWords = '`(?<![[:alnum:]])(' . implode('|', $oLocale->getTitleCaseSmallWords()) . ')(?![[:alnum:]])`i'; $sLoweredCapitalizedString = preg_replace_callback($sPatternLowerWords . $sModifier, function (&$aWord) use($sEncoding) { return mb_strtolower($aWord[0], $sEncoding); }, $sCapitalizedString); // Mise en majuscule de la première lettre des mots suivants les caractères de ponctuation suivants : .-:!'? $aLoweredCapitalizedStrings = preg_split("`([.\\-:!'?])`", $sLoweredCapitalizedString, -1, PREG_SPLIT_DELIM_CAPTURE); foreach ($aLoweredCapitalizedStrings as &$sString) { $sString = preg_replace_callback('`([a-zA-Z])(?:.*?)$`' . $sModifier, function (&$aWord) use($sEncoding) { $sFirstLetter = mb_strtoupper(Encoding::substr($aWord[0], $sEncoding, 0, 1), $sEncoding); $sEndingWord = Encoding::substr($aWord[0], $sEncoding, 1); return $sFirstLetter . $sEndingWord; }, $sString); } $sOutputString = implode('', $aLoweredCapitalizedStrings); break; case self::SENTENCE_CASE: $sEncoding = $this->_oString->getEncoding(); $sOutputString = preg_replace_callback('`(' . Regex::sentence() . ')`' . $sModifier, function (&$aWord) use($sEncoding) { $sFirstLetter = mb_strtoupper(Encoding::substr($aWord[1], $sEncoding, 0, 1), $sEncoding); $sEndingWord = Encoding::substr($aWord[1], $sEncoding, 1); return $sFirstLetter . $sEndingWord; }, $sInputString); break; case self::STUDLY_CAPS: $sEncoding = $this->_oString->getEncoding(); $sOutputString = preg_replace_callback('`([a-zA-Z])`' . $sModifier, function (&$aChar) use($sEncoding) { if (rand(0, 1)) { return mb_strtolower($aChar[1], $sEncoding); } else { return mb_strtoupper($aChar[1], $sEncoding); } }, $sInputString); break; case self::CAMEL_CASE: $sEncoding = $this->_oString->getEncoding(); $sLoweredString = mb_strtolower($sInputString, $this->_oString->getEncoding()); $sUcwordString = preg_replace_callback('`(' . Regex::word() . ')`' . $sModifier, function (&$aWord) use($sEncoding) { $sFirstLetter = mb_strtoupper(Encoding::substr($aWord[1], $sEncoding, 0, 1), $sEncoding); $sEndingWord = Encoding::substr($aWord[1], $sEncoding, 1); return $sFirstLetter . $sEndingWord; }, $sLoweredString); $sOutputString = preg_replace('`([[:punct:][:space:]]+)`' . $sModifier, '', $sUcwordString); break; case self::DROMEDARY_CASE: // Mise en CamelCase $sCapitalizedString = $this->_setCase($sInputString, self::CAMEL_CASE); $sEncoding = $this->_oString->getEncoding(); $sFirstLetter = mb_strtolower(Encoding::substr($sCapitalizedString, $sEncoding, 0, 1), $sEncoding); $sEndingWord = Encoding::substr($sCapitalizedString, $sEncoding, 1); $sOutputString = $sFirstLetter . $sEndingWord; } return $sOutputString; }
public function __construct($sLocale, $cGender = self::ANY) { $this->_oLocale = Factory::create('Person', $sLocale); $this->setGender($cGender); }