示例#1
0
 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));
 }
示例#2
0
 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;
 }
示例#3
0
 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));
 }
示例#4
0
 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;
 }
示例#5
0
 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;
 }
示例#6
0
 protected function _cut($sText, $sEncoding, $iLength)
 {
     if ($iLength) {
         return Encoding::substr($sText, $sEncoding, 0, $iLength);
     } else {
         return '';
     }
 }