strlimit()

databind
vitalif 2010-03-24 00:14:22 +00:00 committed by Vitaliy Filippov
parent 35cda84d26
commit 737149818c
2 changed files with 34 additions and 2 deletions

View File

@ -30,7 +30,7 @@ our @EXPORT_OK = qw(
file_get_contents dbi_hacks ar1el filemd5 mysql_quote updaterow_hashref updateall_hashref
insertall_arrayref insertall_hashref deleteall_hashref dumper_no_lf str2time callif urandom
normalize_url utf8on utf8off rfrom_to mysql2time mysqllocaltime resub requote
hashmrg litsplit strip_tagspace timestamp
hashmrg litsplit strip_tagspace timestamp strlimit
), @EXPORT;
our %EXPORT_TAGS = (all => [ @EXPORT_OK ]);
@ -843,5 +843,27 @@ sub litsplit
return @r;
}
# ограничение длины строки $maxlen символами на границе пробелов и добавление '...', если что.
sub strlimit
{
my ($str, $maxlen) = @_;
if (!$maxlen || $maxlen < 1 || length($str) <= $maxlen)
{
return $str;
}
$str = substr($str, 0, $maxlen);
my $p = rindex($str, ' ');
if ($p < 0 || (my $pt = rindex($str, "\t")) > $p)
{
$p = $pt;
}
if ($p > 0)
{
# обрезаем
$str = substr($str, 0, $p);
}
return $str . '...';
}
1;
__END__

View File

@ -4,6 +4,9 @@
# Компилятор переписан уже 2 раза - сначала на regexы, потом на index() :-)
# А обратная совместимость по синтаксису, как ни странно, до сих пор цела.
# Homepage: http://yourcmc.ru/wiki/VMX::Template
# Author: Vitaliy Filippov, 2006-2010
package VMX::Template;
use strict;
@ -689,12 +692,14 @@ sub function_join { fearr('join', @_) } *function_implode = *fun
sub function_subst { fearr('exec_subst', @_) }
# sprintf
sub function_sprintf { fearr('sprintf', @_) }
# ограничение длины строки $maxlen символами на границе пробелов и добавление '...', если что.
sub function_strlimit{ "strlimit($_[1], $_[2])" }
# создание хеша
sub function_hash { shift; "{" . join(",", @_) . "}"; }
# создание массива
sub function_array { shift; "[" . join(",", @_) . "]"; }
# подмассив по номерам элементов
sub function_subarray { shift; "exec_subarray(" . join(",", @_) . ")"; }
sub function_subarray { shift; "exec_subarray(" . join(",", @_) . ")"; } *function_array_slice = *function_subarray;
# подмассив по кратности номеров элементов
sub function_subarray_divmod { shift; "exec_subarray_divmod(" . join(",", @_) . ")"; }
# получить элемент хеша/массива по неконстантному ключу (например get(iteration.array, rand(5)))
@ -705,6 +710,11 @@ sub function_hget { "($_[1])->\{$_[2]}" }
# для массива
sub function_aget { "($_[1])->\[$_[2]]" }
sub function_shift { "shift(\@{$_[1]})"; }
sub function_pop { "pop(\@{$_[1]})"; }
sub function_unshift { shift(@_); "unshift(\@{".shift(@_)."}, ".join(",", @_).")"; }
sub function_push { shift(@_); "push(\@{".shift(@_)."}, ".join(",", @_).")"; }
# map()
sub function_map
{