MiniPAN

 view release on metacpan or  search on metacpan

doc/slides/mkpres.pl  view on Meta::CPAN


sub image_path {
    my($path) = @_;
    die "File not found: html/images/$path" unless -r "html/images/$path";
    return $path;
}


sub generate_presentation_pages {
    my($pres) = @_;

    generate_title_page($pres);
    generate_contents_page($pres);
    generate_slide_pages($pres);
}

sub generate_title_page {
    my($pres) = @_;

    my $data = {
        %{ $pres->{metadata} },
        next     => slide_filename(1),
        previous => '',
    };
    save_file($template{index}, 'index.html', $data);
}


sub generate_contents_page {
    my($pres) = @_;

    my $data = {
        title    => 'Contents',
        metadata => $pres->{metadata},
        toc      => $pres->{toc},
        next     => slide_filename(1),
        previous => 'index.html',
    };
    save_file($template{toc}, 'toc.html', $data);
}


sub generate_slide_pages {
    my($pres) = @_;

    unlink grep m{/slide\d+\.html}, glob "html/*.html";

    foreach my $slide ( @{ $pres->{slides} } ) {
        my $data = {
          %$slide,
          metadata => $pres->{metadata},
        };
        save_file($template{slide}, $slide->{filename}, $data);
    }
}

sub outdent {
    local($_) = @_;
    s/\s+$//s;
    s/^\s*?\n//s;
    my($prefix, @prefs) = m/^(\s*)/mg;
    foreach (@prefs) {
        $prefix = $_ if length($_) < length($prefix);
    }
    s/^$prefix//mg;
    return $_;
}


sub syntax_highlight {
    my($code, $language) = @_;

    if(!defined $have_vim_highlight) {
        eval 'require Text::VimColor';
        if($@) {
            warn "Warning: Text::VimColor is required for syntax highlighting\n";
            $have_vim_highlight = 0;
        }
        else {
            $have_vim_highlight = 1;
        }
    }
    return $code unless $have_vim_highlight;

    return Text::VimColor->new(
        string   => $code,
        filetype => $language,
    )->html;
}


sub save_file {
    my($tmpl, $file, $data) = @_;

    if($opt{devmode}) {
        my $time = time();
        $data->{next}     .= '?' . $time;
        $data->{previous} .= '?' . $time;
    }
    open my $out, '>:utf8', "./html/$file" or die "open(./html/$file): $!";
    print $out $tmpl->apply(%$data);
}



package Template::MasonLite;

use strict;
use warnings;
use Carp;

our $VERSION = '0.9';

my(
    $nl, $init_sect, $perl_sect, $perl_line, $comp_def, $comp_call, 
    $expression, $literal
);

BEGIN {
    $nl         = qr{(?:[ \r]*\n)};
    $init_sect  = qr{<%init>(.*?)</%init>$nl?}s;
    $perl_sect  = qr{<%perl>(.*?)</%perl>$nl?}s;



( run in 0.949 second using v1.01-cache-2.11-cpan-8f98c5d2c55 )