uHTML
view release on metacpan or search on metacpan
sub codeAttr
{
my $Node = shift ;
my $Attr = shift ;
my $Value = shift ;
return '' unless $Value or $Node->{Attributes} and ($Value = $Node->{Attributes}->{$Attr}) ne '' ;
my( $func,$par,$tail,$sub,$rsub ) ;
my @subs = split m/(?<!\\)\$(?=[a-zA-Z_\$])/s,$Value ;
while( $#subs > 0 )
{
$rsub++ ;
next unless $sub = pop @subs ;
$sub =~ s/\\(?=\$)//s ;
( $func,$par,$tail ) = ($sub =~ m/([a-zA-Z_][0-9a-zA-Z_]*)(?:\(\s*('(?:\\'|[^'])*'|"(?:\\"|[^"])*"|(?:\\.|[^()])*(?:\s*,(?:'(?:\\'|[^'])*'|"(?:\\"|[^"])*"|(?:\\.|[^()])))*)\s*\))?(.*)$/s) ;
$sub = _callwrap( $func,$Node,$Attr,$par ) . $tail ;
pop @{$Node->{PCount}} ;
uHTML/request.pm view on Meta::CPAN
}
$env->{'PATH_INFO'} =~ s%/*$%% ;
$req->{'ENV'} = $env ;
$req->{'charset'} = 'utf-8' ;
$req->{'home'} = $env->{'DATA_ROOT'} ? $env->{'DATA_ROOT'} : $env->{'SCRIPT_ROOT'} ;
$req->{'Root'} = $env->{'DOCUMENT_ROOT'} ;
$req->{'Root'} .= $env->{'REDIRECT_ROOT'} if $env->{'REDIRECT_ROOT'} ;
my $ru = $env->{'REQUEST_URI'} =~ s/\?.*//r ;
$req->{'Request'} = [ split m%/+%,$ru,-1 ] ;
$req->{'Path'} = [ split m%/+%,$env->{'PATH_INFO'},-1 ] ;
$req->{'file'} = $req->{'Root'} . $env->{'PATH_INFO'} ;
if( -d $req->{'file'} )
{
$req->{'file'} .= '/index.uhtml' ;
$req->{'File'} = 'index.uhtml' ;
$req->{'RequestFile'} = 'index.uhtml';
}
else
{
uHTML/request.pm view on Meta::CPAN
{
my $self = shift ;
my $fname = shift ;
if( $fname )
{
$fname = "/${\($self->Path())}/$fname" unless $fname =~ m%^/% ;
if( -f "${\($self->Root())}$fname" )
{
my $p0 = $self->{'Path'}->[0] ;
$self->{'Path'} = [ split m%/+%,$fname,-1 ] ;
$self->{'File'} = pop @{$self->{'Path'}} ;
$self->{'BaseName'} = $self->{'File'} =~ s/\.[^\.]*$//ir ;
$self->{'path'} = join '/',@{$self->{'Path'}} ;
$self->{'file'} = "${\($self->Root())}$self->{'path'}/$self->{'File'}" ;
$self->{'Path'}->[0] = $p0 ;
}
}
return $self->{'File'} ;
}
uHTML/std.pm view on Meta::CPAN
}
sub Choice( $ )
{
my $Node = shift ;
return unless $Node->testAttr( 'tag' ) ;
my $Name = $Node->attr( 'tag' ) ;
return unless $Name ;
my $cond = eval( $Node->attr( 'cond' ) ) ? 0 : 1 ;
my( $P,@S ) ;
@S = split m/\|/,$Name,2 ;
$Name = $S[$cond] if $#S>0 ;
return unless $Name and $Name ne 'choice' ;
$Node->name( $Name ) ;
my $Add = $Node->attr( 'attr' ) ;
$Node->deleteAttr( 'cond','tag','attr' ) ;
foreach( keys %{$Node->attributes()} )
{
next unless $P = $Node->rawAttr( $_ ) ;
@S = split m/\|/,$P,2 ;
$S[$cond] ne '' ? $Node->rawAttr( $_,$S[$cond] ) : $Node->deleteAttr( $_ ) if $#S>0 ;
}
if( $Add )
{
@S = split m/\|/,$Add,2 ;
$Node->addAttr( split $SO,( $#S>0?$S[$cond]:$Add ) ) ;
}
$Node->process() ; #kein insert da dann uHTML-Tags nicht berücksichtigt werden
$Node->trailer( '' ) ; #process hat den Anhang bereits angefügt
}
sub VarChoice( $ )
{
my( $Node,$Par,$Var,$cond,$true,$false ) = @_ ;
return( eval $cond ? $true : $false ) ;
uHTML/std.pm view on Meta::CPAN
$Node->attr( $_ ) or $Node->deleteAttr( $_ ) foreach qw( createonly replace ) ;
$Node->testAttr( $_ ) or $Node->setAttr( $_,$env->{'uHTML.MacroVal'}->{$Name}->{$_} ) foreach @{$env->{'uHTML.MacroAttr'}->{$Name}} ;
print STDERR "Execute macro $Name(${\(join ',',map \"$_='${\($Node->attr($_))}'\",keys %{$Node->attributes()})})\n" if $DEBUG > 0 ;
Define( $Node ) ;
if( $env->{'uHTML.MacroBody'}->{$Name} )
{
$Node->map( '','' ) ;
$Macro->map( '','' ) ;
my( $H,$T ) = split m/<MacroBody>/s,$Macro->HTML(),2 ;
unshift @{$Node->{HTML}},$H ;
push @{$Node->{HTML}},$T ;
}
else
{
$Macro->map( '','' ) ;
$Node->{HTML} = $Macro->{HTML} ;
}
ClearDef( $Node ) ;
}
( run in 1.006 second using v1.01-cache-2.11-cpan-71847e10f99 )