Esempio n. 1
0
 protected function _commonHandling()
 {
     if ($this->_oString->getEncoding() === Encoding::UTF_8) {
         $this->_oString->setString(Encoding::fixUTF8($this->_oString->get()));
     }
     return $this->_oString;
 }
Esempio n. 2
0
 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;
 }
Esempio n. 3
0
 /**
  * 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;
 }
Esempio n. 4
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));
 }
Esempio n. 5
0
 /**
  * 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;
 }
Esempio n. 6
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;
 }
Esempio n. 7
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));
 }
Esempio n. 8
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;
 }
Esempio n. 9
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;
 }
Esempio n. 10
0
 protected function _cut($sText, $sEncoding, $iLength)
 {
     if ($iLength) {
         return Encoding::substr($sText, $sEncoding, 0, $iLength);
     } else {
         return '';
     }
 }