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)); }
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 ''; } }