htpl

 view release on metacpan or  search on metacpan

HTPL-modules/lib/HTML/HTPL/Sys.pm  view on Meta::CPAN

sub isheb {
    shift =~ /[\xE0-\xFA]/;
}

sub readini {
    return unless (-f 'website.ini');

    eval "require IniConf;";
    return unless ($IniConf::VERSION);
    my $cfg = new IniConf( -file => 'website.ini', -nocase => 1);
    my (%hash, $s, $p, $v);
    foreach $s ($cfg->Sections) {
        foreach $p ($cfg->Parameters($s)) {
            $hash{$s, $p} = $cfg->val($s, $p);
        }
    }    
    sethash('config', %hash);
}

sub pushvars {
    my @vars = @_;
    @vars = @{$vars[0]} if (!$#vars && UNIVERSAL::isa($vars[0], 'ARRAY'));
    my $hash = {};
    foreach (@vars) {
        $hash->{$_} = &getvar($_);
    }
    push(@__htpl_stack, $hash);
}

sub popvars {
    my $hash = pop @__htpl_stack;
    &publish(%$hash);
}

sub pkghash {
    %{(eval "*$_[0]\::")};
}

sub pkganalyze {
    my ($pkg, $full) = @_;
    my %hash = pkghash($pkg);
    my @result;
    my $pre = $full ? "$pkg\::" : "";
    foreach (keys %hash) {
        my $t = "*${pkg}::$_";
        push(@result, '$' . $pre . $_) if (eval("$t\{SCALAR}"));
        push(@result, '@' . $pre . $_) if (eval("$t\{ARRAY}"));
        push(@result, '%' . $pre . $_) if (eval("$t\{HASH}"));
        push(@result, '&' . $pre . $_) if (eval("$t\{CODE}"));
    }
    @result;
}

sub pkglist {
    my ($pkg, $char, $full) = @_;
    $char =~ s/^(.)$/^\\$1/;
    grep /$char/, &pkganalyze($pkg, $full);
}

sub getpkg {
    my $caller = (caller)[0];
    my $loop;
    do {
        $loop++;
        my $this = (caller($loop))[0];
        return $this if ($this ne $caller);
    }
}

sub mytime {
    $have_time_hires ? Time::HiRes::gettimeofday() : time;
}

sub mytimesince {
    my $from = shift;
    my $t = &mytime;
    $have_time_hires ? tv_interval($t, $from) : abs($t - $from);
}

sub compileutil {
    my $exp = shift;
    my @tokens = split(/\s+/, $exp);
    my @trans = map {
        s/^AND$/&&/i;
        s/^OR$/||/i;
        s/^NOT$/!/i;
        /^[a-z]/i && tr/A-Z/a-z/ && 
            ((":lt:gt:eq:ge:le:ne:" =~ /$_/i)
              || ($_ = "\$hash->{'$_'}"));
        $_;
    } @tokens;
    my $code = qq!sub {
        my \$hash = shift;
        ! . join(" ", @trans) . qq!;
    }!;
    my $ref = eval($code);
    &HTML::HTPL::Lib::htdie($@) unless (UNIVERSAL::isa($ref, 'CODE'));
    $ref;
}

sub DEBUG (&) {
    return unless ($debug_file);
    my $code = shift;
    &HTML::HTPL::Lib::begintransaction;
    eval '&$code';
    my $txt = &HTML::HTPL::Lib::endtransaction;
    open(O, ">>$debug_file");
    print O $txt;
    print O "$@\n" if ($@);
    close(O);
}

sub scriptdir {
    my $slash = &HTML::HTPL::Lib::slash;
    my @tokens = split($slash, $0);
    pop @tokens;
    pop @tokens if ($tokens[-1] eq 'htpl-cache');
    join($slash, @tokens);
}

1;



( run in 1.399 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )