protected function _commonHandling() { if ($this->_oString->getEncoding() === Encoding::UTF_8) { $this->_oString->setString(Encoding::fixUTF8($this->_oString->get())); } return $this->_oString; }
public function __construct($sEncoding) { if (!is_string($sEncoding)) { throw ExceptionType::invalidArgument("Argument #1 doit être une chaîne de caractères.", Exception::FROM_HANDLER); } $bValidEncoding = Encoding::isValidEncoding($sEncoding); if (!$bValidEncoding) { throw ExceptionType::domain("L'encodage passé en paramètre ({$sEncoding}) n'est pas valide. Il doit correspondre à l'un des encodages suivants : " . implode(', ', mb_list_encodings()), Exception::FROM_HANDLER); } $this->_sFinalEncoding = $bValidEncoding; }
/** * Returns a word in singular form. * * @param string $sWord The word in plural form. * * @return string The word in singular form. */ public function singularize($sWord, $sEncoding = null) { if ($sEncoding === null) { $sEncoding = Encoding::detectEncoding($sWord); } else { $sEncoding = Encoding::isValidEncoding($sEncoding); if (!$sEncoding) { throw ExceptionType::domain("Argument #2 n'est pas un encodage valide.", Exception::FROM_INFLECTOR); } } $sResult = $this->_process($sWord, $sEncoding, $this->_oLocale->singulars()); return $this->_aCache['singular'][$sWord] = $sResult ?: $sWord; }
protected function _globalHtmlHandling() { $sText = implode('', $this->_aTagTexts['texts']); $sShuffle = str_shuffle($sText); $sEncoding = $this->_oString->getEncoding(); $oPositionAnalyzer = new PositionAnalyzer($this->_oString); $aTagTextPos = $oPositionAnalyzer->getTagTextPos(); foreach ($aTagTextPos as $iIndex => $aTagTextPos) { if ($aTagTextPos['type'] === 'text') { $this->_aTagTexts['texts'][$iIndex] = Encoding::substr($sShuffle, $sEncoding, $aTagTextPos['pos']['text']['start'], $aTagTextPos['length']); } } return $this->_oString->setString($this->_getMergedTagTexts(true)); }
/** * Convertit la chaîne de caractères dans l'encodage renseigné ou bien retourne le type d'encodage utilisé. * Attention : la modification de l'encodage n'est pas fiable à 100%. * * @todo gerer exception * @param string $sEncodeTo Si ce paramètre est absent, la méthode retourne le type d'encodage courant. Dans l'autre cas, il convertit la chaîne dans l'encodage renseigné. * @return Encoding * @throws Exception */ public function __construct($sEncodeTo) { // S'il y a des segments en cours de traitement $iProcessingPointsNb = Point::processingPointsCount(); if ($iProcessingPointsNb) { throw ExceptionType::runtime("Il n'est pas possible de convertir la sous-chaîne de caractères pointée par la méthode Aouka\\Text\\Manipulator::Point(). Il faut d'abord sortir de toutes les sous-chaînes (qui sont au nombre de {$iProcessingPointsNb}) via la méthode Aouka\\Text\\Manipulator::EndFocus()", Exception::FROM_HANDLER); } if (!is_string($sEncodeTo)) { throw ExceptionType::invalidArgument("Argument #1 doit être une chaîne de caractères ou NULL.", Exception::FROM_HANDLER); } $sEncodingDestination = Encoding::isValidEncoding($sEncodeTo); if (!$sEncodingDestination) { throw ExceptionType::domain("Argument #1 n'est pas un encodage valide. Les encodages supportés sont décrits sur http://www.php.net/manual/fr/function.mb-list-encodings.php.", Exception::FROM_HANDLER); } $this->_sEncodingDestination = $sEncodingDestination; }
protected function _getEnoughPadChars($iNbChars) { $iPadStringLength = mb_strlen($this->_sPadString, $this->_oString->getEncoding()); $sPadString = $this->_sPadString; if ($iNbChars !== $iPadStringLength) { if (!$iNbChars) { $sPadString = ''; } else { $sAction = $iNbChars < $iPadStringLength ? 'sub' : 'add'; switch ($sAction) { case 'add': $sPadString = str_repeat($sPadString, ceil($iNbChars / $iPadStringLength)); case 'sub': $sPadString = Encoding::substr($sPadString, $this->_oString->getEncoding(), 0, $iNbChars); } } } return $sPadString; }
protected function _globalHtmlHandling() { $sString = (new SetCase(self::CAPITALIZE_CASE, $this->_getExceptions()))->execute($this->_oString)->get(); $aTagTexts = $this->_splitTagText($sString, true, true); $sEncoding = $this->_oString->getEncoding(); $bPrevTextEndWithSpace = true; foreach ($aTagTexts['texts'] as &$sText) { // Si le texte précédent ne termine pas avec un espace if (!$bPrevTextEndWithSpace) { // et que le texte courant ne débute pas avec un espace if (!$this->_hasSpaceAtExtremity($sText, true)) { // On met en minuscule la première lettre du texte courant $sFirstLetter = mb_strtolower(Encoding::substr($sText, $sEncoding, 0, 1), $sEncoding); $sEndingText = Encoding::substr($sText, $sEncoding, 1); $sText = $sFirstLetter . $sEndingText; } } // Si le texte courant termine par un espace $bPrevTextEndWithSpace = $this->_hasSpaceAtExtremity($sText, false); } $sResult = self::_coordinatingMerge($aTagTexts['tags'], $aTagTexts['texts']); return $this->_oString->setString(implode('', $sResult)); }
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; }
protected static function _ucfirst($sInputString, $sInputEncoding) { $sFirstLetter = mb_strtoupper(Encoding::substr($sInputString, $sInputEncoding, 0, 1), $sInputEncoding); $sEndingString = Encoding::substr($sInputString, $sInputEncoding, 1); return $sFirstLetter . $sEndingString; }
protected function _cut($sText, $sEncoding, $iLength) { if ($iLength) { return Encoding::substr($sText, $sEncoding, 0, $iLength); } else { return ''; } }