]> wagnertech.de Git - timetracker.git/blobdiff - WEB-INF/lib/smarty/plugins/modifier.truncate.php
Initial repo created
[timetracker.git] / WEB-INF / lib / smarty / plugins / modifier.truncate.php
diff --git a/WEB-INF/lib/smarty/plugins/modifier.truncate.php b/WEB-INF/lib/smarty/plugins/modifier.truncate.php
new file mode 100644 (file)
index 0000000..0e9d4b9
--- /dev/null
@@ -0,0 +1,67 @@
+<?php
+/**
+ * Smarty plugin
+ *
+ * @package Smarty
+ * @subpackage PluginsModifier
+ */
+/**
+ * Smarty truncate modifier plugin
+ * 
+ * Type:     modifier<br>
+ * Name:     truncate<br>
+ * Purpose:  Truncate a string to a certain length if necessary,
+ *               optionally splitting in the middle of a word, and
+ *               appending the $etc string or inserting $etc into the middle.
+ * 
+ * @link http://smarty.php.net/manual/en/language.modifier.truncate.php truncate (Smarty online manual)
+ * @author Monte Ohrt <monte at ohrt dot com> 
+ * @param string $string input string
+ * @param integer $length lenght of truncated text
+ * @param string $etc end string
+ * @param boolean $break_words truncate at word boundary
+ * @param boolean $middle truncate in the middle of text
+ * @return string truncated string
+ */
+function smarty_modifier_truncate($string, $length = 80, $etc = '...',
+    $break_words = false, $middle = false)
+{
+    if ($length == 0)
+        return '';
+
+    if (is_callable('mb_strlen')) {
+        if (mb_detect_encoding($string, 'UTF-8, ISO-8859-1') === 'UTF-8') {
+            // $string has utf-8 encoding
+            if (mb_strlen($string) > $length) {
+                $length -= min($length, mb_strlen($etc));
+                if (!$break_words && !$middle) {
+                    $string = preg_replace('/\s+?(\S+)?$/u', '', mb_substr($string, 0, $length + 1));
+                } 
+                if (!$middle) {
+                    return mb_substr($string, 0, $length) . $etc;
+                } else {
+                    return mb_substr($string, 0, $length / 2) . $etc . mb_substr($string, - $length / 2);
+                } 
+            } else {
+                return $string;
+            } 
+        } 
+    } 
+    // $string has no utf-8 encoding
+    if (strlen($string) > $length) {
+        $length -= min($length, strlen($etc));
+        if (!$break_words && !$middle) {
+            $string = preg_replace('/\s+?(\S+)?$/', '', substr($string, 0, $length + 1));
+        } 
+        if (!$middle) {
+            return substr($string, 0, $length) . $etc;
+        } else {
+            return substr($string, 0, $length / 2) . $etc . substr($string, - $length / 2);
+        } 
+    } else {
+        return $string;
+    } 
+} 
+
+?>
\ No newline at end of file