1<?php
2// $Id$
3
4/**
5 * Smarty plugin
6 * @package Smarty
7 * @subpackage plugins
8 */
9
10/**
11 * Smarty truncate modifier plugin
12 *
13 * Type:     modifier<br>
14 * Name:     truncate<br>
15 * Purpose:  Truncate a string to a certain length if necessary,
16 *           optionally splitting in the middle of a word, and
17 *           appending the $etc string or inserting $etc into the middle.
18 * @link http://smarty.php.net/manual/en/language.modifier.truncate.php
19 *          truncate (Smarty online manual)
20 * @author   Monte Ohrt <monte at ohrt dot com>
21 * @param string
22 * @param integer
23 * @param string
24 * @param boolean
25 * @param boolean
26 * @return string
27 */
28function smarty_modifier_truncate(
29	$string,
30	$length = 80,
31	$etc = '...',
32	$break_words = false,
33	$middle = false
34) {
35
36	if ($length == 0) {
37		return '';
38	}
39
40	$strlength = (function_exists('mb_strlen') ? 'mb_strlen' : 'strlen');
41	if ($strlength($string) > $length) {
42		$length -= min($length, strlen($etc));
43		if (function_exists('mb_substr')) {
44			$func = 'mb_substr';
45		} else {
46			$func = 'substr';
47		}
48		if (! $break_words && ! $middle) {
49			$string = preg_replace('/\s+?(\S+)?$/', '', $func($string, 0, $length + 1));
50		}
51		if (! $middle) {
52			return $func($string, 0, $length) . $etc;
53		} else {
54			return $func($string, 0, $length / 2) . $etc . $func($string, -$length / 2);
55		}
56	} else {
57		return $string;
58	}
59}
60