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 function _process($sString) { Regex::word($this->_sAdditionalChars)->setModifiers($this->_m())->matchAll($sString, $aWords); return count($aWords[0]); }
protected function _plainHandling() { $oRegex = Regex::word()->setModifiers($this->_m()); return $this->_limitByRegex(3, $oRegex); }
protected function _globalHtmlHandling() { $aTexts = $this->_splitTagText($this->_oString->get(), false); Regex::word($this->_sAdditionalChars)->setModifiers($this->_m())->matchAll(implode('', $aTexts), $aMatches); return $aMatches[0]; }