Remove stray block.ROW-> from templates and modules
parent
088e5c02a2
commit
5eb26799a2
|
@ -13,6 +13,7 @@ my $mtimes = {}; # время изменения файлов
|
|||
my $uncompiled_code = {}; # нескомпилированный код
|
||||
my $compiled_code = {}; # скомпилированный код (sub'ы)
|
||||
my $langhashes = {}; # хеши ленгпаков
|
||||
my %assigncache = {}; # кэш eval'ов присвоений
|
||||
|
||||
# Конструктор
|
||||
# $obj = new VMX::Template, %params
|
||||
|
@ -202,44 +203,58 @@ sub loadfile
|
|||
|
||||
# Функция присваивает переменные блока в новую итерацию
|
||||
# $obj->assign_block_vars ($block, varname1 => value1, varname2 => value2, ...)
|
||||
# Так тоже можно (при этом избежим лишнего копирования хеша!):
|
||||
# $obj->assign_block_vars ($block, { varname1 => value1, varname2 => value2, ... })
|
||||
sub assign_block_vars
|
||||
{
|
||||
my $self = shift;
|
||||
my $block = shift;
|
||||
my $vararray = { @_ };
|
||||
|
||||
my $vararray;
|
||||
if (@_ > 1)
|
||||
{
|
||||
# копирование хеша, да...
|
||||
$vararray = { @_ };
|
||||
}
|
||||
else
|
||||
{
|
||||
# а так можно и не копировать
|
||||
($vararray) = @_;
|
||||
}
|
||||
$block =~ s/^\.+//so;
|
||||
$block =~ s/\.+$//so;
|
||||
|
||||
if (!$block)
|
||||
{
|
||||
# если не блок, а корневой уровень
|
||||
$self->assign_vars (@_);
|
||||
$self->assign_vars($vararray);
|
||||
}
|
||||
elsif ($block !~ /\.[^\.]/)
|
||||
elsif ($block !~ /\.[^\.]/so)
|
||||
{
|
||||
# если блок, но не вложенный
|
||||
$block =~ s/\.*$/./; # добавляем . в конец, если надо
|
||||
$block =~ s/\.*$/./so; # добавляем . в конец, если надо
|
||||
$self->{tpldata}->{$block} ||= [];
|
||||
push @{$self->{tpldata}->{$block}}, $vararray;
|
||||
}
|
||||
else
|
||||
{
|
||||
# если вложенный блок
|
||||
my $ev = '$self->{tpldata}';
|
||||
$block =~ s/\.+$//; # обрезаем точки в конце (хоть их 10 там)
|
||||
my $ev;
|
||||
$block =~ s/\.+$//so; # обрезаем точки в конце (хоть их 10 там)
|
||||
unless ($ev = $assigncache{"=$block"})
|
||||
{
|
||||
$ev = '$_[0]';
|
||||
my @blocks = split /\./, $block;
|
||||
my $lastblock = pop @blocks;
|
||||
foreach (@blocks)
|
||||
{
|
||||
$ev .= "{'$_.'}";
|
||||
$ev .= "[-1+\@\{$ev\}]";
|
||||
$ev .= "[\$\#\{$ev\}]";
|
||||
}
|
||||
$ev .= "{'$lastblock.'}";
|
||||
$ev = "$ev = [] unless $ev; push \@\{$ev\}, \$vararray;";
|
||||
eval ($ev);
|
||||
$ev = "sub { $ev = [] unless $ev; push \@\{$ev\}, \$_[1]; }";
|
||||
$ev = $assigncache{"=$block"} = eval $ev;
|
||||
}
|
||||
&$ev($self->{tpldata}, $vararray);
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -256,31 +271,35 @@ sub append_block_vars
|
|||
# если не блок, а корневой уровень
|
||||
$self->assign_vars(@_);
|
||||
}
|
||||
elsif ($block !~ /\../)
|
||||
elsif ($block !~ /\../so)
|
||||
{
|
||||
# если блок, но не вложенный
|
||||
$block =~ s/\.*$/./; # добавляем . в конец, если надо
|
||||
$block =~ s/\.*$/./so; # добавляем . в конец, если надо
|
||||
$self->{tpldata}{$block} ||= [];
|
||||
$lastit = @{$self->{tpldata}{$block}} - 1;
|
||||
$lastit = $#{$self->{tpldata}{$block}};
|
||||
$lastit = 0 if $lastit < 0;
|
||||
$self->{tpldata}{$block}[$lastit]{$_} = $vararray{$_}
|
||||
foreach keys %vararray;
|
||||
for keys %vararray;
|
||||
}
|
||||
else
|
||||
{
|
||||
# если вложенный блок
|
||||
my $ev = '$self->{tpldata}';
|
||||
$block =~ s/\.+$//; # обрезаем точки в конце (хоть их 10 там)
|
||||
my $ev;
|
||||
$block =~ s/\.+$//so; # обрезаем точки в конце (хоть их 10 там)
|
||||
unless ($ev = $assigncache{"+$block"})
|
||||
{
|
||||
$ev = '$_[0]';
|
||||
my @blocks = split /\.+/, $block;
|
||||
foreach (@blocks)
|
||||
{
|
||||
$ev .= "{'$_.'}";
|
||||
$ev .= "[-1+\@\{$ev\}]";
|
||||
$ev .= "[\$#\{$ev\}]";
|
||||
}
|
||||
$ev = "\$ev{\$k} = \$vararray{\$k} foreach \$k (keys \%vararray);";
|
||||
eval ($ev);
|
||||
$ev = "sub { my \$k; \$ev{\$k} = \$_[1]->{\$k} for \$k (keys \%{$_[1]}); }";
|
||||
$ev = $assigncache{"+$block"} = eval $ev;
|
||||
}
|
||||
&$ev($self->{tpldata}, \%vararray);
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -289,8 +308,17 @@ sub append_block_vars
|
|||
sub assign_vars
|
||||
{
|
||||
my $self = shift;
|
||||
$self->{tpldata}{'.'}[0] = {} unless $self->{tpldata}{'.'}[0];
|
||||
%{$self->{tpldata}{'.'}[0]} = (%{$self->{tpldata}{'.'}[0]}, @_);
|
||||
my %h;
|
||||
if (@_ > 1)
|
||||
{
|
||||
%h = @_;
|
||||
}
|
||||
else
|
||||
{
|
||||
%h = %{$_[0]};
|
||||
}
|
||||
$self->{tpldata}{'.'}[0] ||= {};
|
||||
$self->{tpldata}{'.'}[0]{$_} = $h{$_} for keys %h;
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -301,7 +329,7 @@ sub tr_assign_vars
|
|||
$self->assign_vars($self->tr_vars(@_));
|
||||
}
|
||||
|
||||
# Аналог assign_block_vars, но преобазует имена переменных
|
||||
# Аналог assign_block_vars, но преобразует имена переменных
|
||||
sub tr_assign_block_vars
|
||||
{
|
||||
my $self = shift;
|
||||
|
@ -309,7 +337,7 @@ sub tr_assign_block_vars
|
|||
$self->assign_block_vars($block, $self->tr_vars(@_));
|
||||
}
|
||||
|
||||
# Аналог append_block_vars, но преобазует имена переменных
|
||||
# Аналог append_block_vars, но преобразует имена переменных
|
||||
sub tr_append_block_vars
|
||||
{
|
||||
my $self = shift;
|
||||
|
|
Loading…
Reference in New Issue