getCharset() public method

public getCharset ( )
 function twig_truncate_filter(Twig_Environment $env, $value, $length = 30, $separator = '...')
 {
     if (mb_strlen($value, $env->getCharset()) > $length) {
         return mb_substr($value, 0, $length, $env->getCharset()) . $separator;
     }
     return $value;
 }
Example #2
0
 function twig_wordwrap_filter(Twig_Environment $env, $value, $length = 80, $separator = "\n", $preserve = false)
 {
     $sentences = array();
     $previous = mb_regex_encoding();
     mb_regex_encoding($env->getCharset());
     $pieces = mb_split($separator, $value);
     mb_regex_encoding($previous);
     foreach ($pieces as $piece) {
         while (!$preserve && mb_strlen($piece, $env->getCharset()) > $length) {
             $sentences[] = mb_substr($piece, 0, $length, $env->getCharset());
             $piece = mb_substr($piece, $length, 2048, $env->getCharset());
         }
         $sentences[] = $piece;
     }
     return implode($separator, $sentences);
 }
Example #3
0
 public function dumpData(\Twig_Environment $env, Data $data, $maxDepth = 0)
 {
     $this->dumper->setCharset($env->getCharset());
     $this->dumper->dump($data, null, array('maxDepth' => $maxDepth));
     $dump = stream_get_contents($this->output, -1, 0);
     rewind($this->output);
     ftruncate($this->output, 0);
     return str_replace("\n</pre", '</pre', rtrim($dump));
 }
Example #4
0
 public function dump(\Twig_Environment $env, $context)
 {
     if (!$env->isDebug()) {
         return;
     }
     if (2 === func_num_args()) {
         $vars = array();
         foreach ($context as $key => $value) {
             if (!$value instanceof \Twig_Template) {
                 $vars[$key] = $value;
             }
         }
         $vars = array($vars);
     } else {
         $vars = func_get_args();
         unset($vars[0], $vars[1]);
     }
     $dump = fopen('php://memory', 'r+b');
     $this->dumper->setCharset($env->getCharset());
     foreach ($vars as $value) {
         $this->dumper->dump($this->cloner->cloneVar($value), $dump);
     }
     return stream_get_contents($dump, -1, 0);
 }
 function twig_capitalize_string_filter(Twig_Environment $env, $string)
 {
     if (null !== ($charset = $env->getCharset())) {
         return mb_strtoupper(mb_substr($string, 0, 1, $charset), $charset) . mb_strtolower(mb_substr($string, 1, mb_strlen($string, $charset), $charset), $charset);
     }
     return ucfirst(strtolower($string));
 }
 public function truncateText(\Twig_Environment $env, $value, $length = 64, $preserve = false, $separator = '...')
 {
     try {
         $value = (string) $value;
     } catch (\Exception $e) {
         $value = '';
     }
     if (function_exists('mb_get_info')) {
         if (mb_strlen($value, $env->getCharset()) > $length) {
             if ($preserve) {
                 // If breakpoint is on the last word, return the value without separator.
                 if (false === ($breakpoint = mb_strpos($value, ' ', $length, $env->getCharset()))) {
                     return $value;
                 }
                 $length = $breakpoint;
             }
             return rtrim(mb_substr($value, 0, $length, $env->getCharset())) . $separator;
         }
         return $value;
     }
     if (strlen($value) > $length) {
         if ($preserve) {
             if (false !== ($breakpoint = strpos($value, ' ', $length))) {
                 $length = $breakpoint;
             }
         }
         return rtrim(substr($value, 0, $length)) . $separator;
     }
     return $value;
 }
Example #7
0
 /**
  * 文字列を一定の長さで切り取る
  * 切り取った後は、指定のマーカーを付与する
  *
  * @access public
  * @param  Twig_Environment
  * @param  String
  * @param  Int      切り出す開始位置
  * @param  Int      切り出す終了位置
  * @param  String   切り出した文字列の後に付加する文字
  * @return String
  */
 public static function trancate(Twig_Environment $env, $string, $start = 0, $end = 30, $marker = "[...]")
 {
     return mb_strimwidth($string, $start, $end, $marker, $env->getCharset());
 }
Example #8
0
/**
 * Returns a capitalized string.
 *
 * @param Twig_Environment $env    A Twig_Environment instance
 * @param string           $string A string
 *
 * @return string The capitalized string
 */
function twig_capitalize_string_filter(Twig_Environment $env, $string)
{
    $charset = $env->getCharset();
    return mb_strtoupper(mb_substr($string, 0, 1, $charset), $charset) . mb_strtolower(mb_substr($string, 1, 2147483647, $charset), $charset);
}
 /**
  * Cuts a string to the length of $length and replaces the last characters
  * with the ellipsis if the text is longer than length.
  *
  * @param \Twig_Environment $env
  * @param string $text String to truncate.
  * @param int $length Length of returned string, including ellipsis.
  * @param string $ellipsis Will be used as Ending and appended to the trimmed string (`ending` is deprecated)
  * @param bool $exact If false, $text will not be cut mid-word
  * @param bool $html If true, HTML tags would be handled correctly
  *
  * @return string
  */
 public static function truncate(\Twig_Environment $env, $text, $length = 100, $ellipsis = '...', $exact = true, $html = false)
 {
     if ($html && $ellipsis == '...' && $env->getCharset() == 'UTF-8') {
         $ellipsis = "…";
     }
     if (!function_exists('mb_strlen')) {
         class_exists('Multibyte');
     }
     $openTags = array();
     if ($html) {
         $text = html_entity_decode($text, null, $env->getCharset());
         if (mb_strlen(preg_replace('/<.*?>/', '', $text)) <= $length) {
             return $text;
         }
         $totalLength = mb_strlen(strip_tags($ellipsis));
         $truncate = '';
         preg_match_all('/(<\\/?([\\w+]+)[^>]*>)?([^<>]*)/', $text, $tags, PREG_SET_ORDER);
         foreach ($tags as $tag) {
             if (!preg_match('/img|br|input|hr|area|base|basefont|col|frame|isindex|link|meta|param/s', $tag[2])) {
                 if (preg_match('/<[\\w]+[^>]*>/s', $tag[0])) {
                     array_unshift($openTags, $tag[2]);
                 } elseif (preg_match('/<\\/([\\w]+)[^>]*>/s', $tag[0], $closeTag)) {
                     $pos = array_search($closeTag[1], $openTags);
                     if ($pos !== false) {
                         array_splice($openTags, $pos, 1);
                     }
                 }
             }
             $truncate .= $tag[1];
             $contentLength = mb_strlen(preg_replace('/&[0-9a-z]{2,8};|&#[0-9]{1,7};|&#x[0-9a-f]{1,6};/i', ' ', $tag[3]));
             if ($contentLength + $totalLength > $length) {
                 $left = $length - $totalLength;
                 $entitiesLength = 0;
                 if (preg_match_all('/&[0-9a-z]{2,8};|&#[0-9]{1,7};|&#x[0-9a-f]{1,6};/i', $tag[3], $entities, PREG_OFFSET_CAPTURE)) {
                     foreach ($entities[0] as $entity) {
                         if ($entity[1] + 1 - $entitiesLength <= $left) {
                             $left--;
                             $entitiesLength += mb_strlen($entity[0]);
                         } else {
                             break;
                         }
                     }
                 }
                 $truncate .= mb_substr($tag[3], 0, $left + $entitiesLength);
                 break;
             } else {
                 $truncate .= $tag[3];
                 $totalLength += $contentLength;
             }
             if ($totalLength >= $length) {
                 break;
             }
         }
     } else {
         if (mb_strlen($text) <= $length) {
             return $text;
         }
         $truncate = mb_substr($text, 0, $length - mb_strlen($ellipsis));
     }
     if (!$exact) {
         $spacepos = mb_strrpos($truncate, ' ');
         if ($html) {
             $truncateCheck = mb_substr($truncate, 0, $spacepos);
             $lastOpenTag = mb_strrpos($truncateCheck, '<');
             $lastCloseTag = mb_strrpos($truncateCheck, '>');
             if ($lastOpenTag > $lastCloseTag) {
                 preg_match_all('/<[\\w]+[^>]*>/s', $truncate, $lastTagMatches);
                 $lastTag = array_pop($lastTagMatches[0]);
                 $spacepos = mb_strrpos($truncate, $lastTag) + mb_strlen($lastTag);
             }
             $bits = mb_substr($truncate, $spacepos);
             preg_match_all('/<\\/([a-z]+)>/', $bits, $droppedTags, PREG_SET_ORDER);
             if (!empty($droppedTags)) {
                 if (!empty($openTags)) {
                     foreach ($droppedTags as $closingTag) {
                         if (!in_array($closingTag[1], $openTags)) {
                             array_unshift($openTags, $closingTag[1]);
                         }
                     }
                 } else {
                     foreach ($droppedTags as $closingTag) {
                         $openTags[] = $closingTag[1];
                     }
                 }
             }
         }
         $truncate = mb_substr($truncate, 0, $spacepos);
     }
     $truncate .= $ellipsis;
     if ($html) {
         foreach ($openTags as $tag) {
             $truncate .= '</' . $tag . '>';
         }
     }
     return $truncate;
 }
 /**
  * @param Twig_Environment $env
  * @param $context
  * @return string
  */
 public function apply_function_twig_filter(Twig_Environment $env, $context, $string)
 {
     // get the current charset for instance
     $charset = $env->getCharset();
     $args = func_get_args();
     $func = current(array_splice($args, 2, 1));
     return call_user_func_array($func, $args);
 }
Example #11
0
 /**
  * Filter used to safely truncate a string with html
  *
  * @param \Twig_Environment $env
  * @param string            $value
  * @param int               $length
  * @param bool              $preserve
  * @param string            $separator
  *
  * @return string
  */
 public function safeTruncate(\Twig_Environment $env, $value, $length = 30, $preserve = true, $separator = '...')
 {
     $charset = $env->getCharset();
     if ($this->isMultiByteStringAvailable() && $this->getMultiByteString()) {
         $strlen = function ($string, $encoding = null) {
             return mb_strlen($string, $encoding);
         };
         $substr = function ($string, $start, $length = null, $encoding = null) {
             return mb_substr($string, $start, $length, $encoding);
         };
         $strpos = function ($haystack, $needle, $offset = null, $encoding = null) {
             return mb_strpos($haystack, $needle, $offset, $encoding);
         };
     } else {
         $strlen = function ($string, $encoding = null) {
             return strlen($string);
         };
         $substr = function ($string, $start, $length = null, $encoding = null) {
             return substr($string, $start, $length);
         };
         $strpos = function ($haystack, $needle, $offset = null, $encoding = null) {
             return strpos($haystack, $needle, $offset);
         };
     }
     // First, strip tags to get a exact chars count
     $strippedValue = strip_tags($value);
     // Initialize the breakpoint to the exact length for now
     $breakpoint = $length;
     // Check if the string is bigger than the available length, otherwise, there is nothing to do
     if (strlen($strippedValue) > $length) {
         // Initialize the pipedValue used to replace spaces by pipe in html tags
         $pipedValue = $value;
         // Check if there is html tags in the original value
         if ($strippedValue !== $value) {
             // Replace spaces in html tags by pipes to easily split the string by spaces available in the text
             $pipedValue = preg_replace_callback('#<([^>]*)( )([^<]*)>#', function ($matches) {
                 return str_replace(' ', '|', $matches[0]);
             }, $value);
         }
         // Initialize the available words
         $words = explode(' ', $substr($strippedValue, 0, $breakpoint, $charset));
         $availableWords = count($words);
         $lastWord = '';
         // If we have to preserve words
         if ($preserve) {
             // First check if there is any spaces available in the string
             if (false !== $strpos($substr($strippedValue, 0, $length, $charset), ' ', null, $charset)) {
                 // Get a breakpoint at the next space after the available length
                 if (false !== ($nextSpace = $strpos($substr($strippedValue, $length, $strlen($strippedValue, $charset), $charset), ' ', null, $charset))) {
                     // Update breakpoint to next space
                     $breakpoint += $nextSpace;
                     // Split the string by spaces until the breakpoint
                     $words = explode(' ', $substr($strippedValue, 0, $breakpoint, $charset));
                     // If the space is not the next char, we should remove last word
                     if ($nextSpace > 0) {
                         // Remove the last element which is outside the scope of defined length
                         array_pop($words);
                     }
                     // Get the count of available words
                     $availableWords = count($words);
                 } else {
                     // Otherwise remove the last word from the array
                     $availableWords--;
                 }
             } else {
                 // Otherwise remove the last word from the array
                 $availableWords--;
             }
         } else {
             // Otherwise, preserve the last word part and remove it from the array
             $lastWord = $words[count($words) - 1];
             $availableWords--;
         }
         // Split the piped value by spaces
         $words = explode(' ', $pipedValue);
         // Remove words that are not in the scope defined by the length
         $words = array_slice($words, 0, $availableWords);
         if ($lastWord !== '') {
             $words[] = $lastWord;
         }
         $pipedValue = implode(' ', $words);
         // Replace back pipes in html tags to spaces
         $value = preg_replace_callback('#<([^>]*)(|)([^<]*)>#', function ($matches) {
             return str_replace('|', ' ', $matches[0]);
         }, $pipedValue);
         // Finally close all unclosed tags and add trailing separator
         return $this->closeTags($value . $separator);
     }
     return $value;
 }