The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#! /usr/bin/perl
#---------------------------------------------------------------------
# Example usage of PostScript::ScheduleGrid::XMLTV
# by Christopher J. Madsen
#
# This example script is in the public domain.
# Copy from it as you like.
#---------------------------------------------------------------------

use strict;
use warnings;
use 5.010;

use DateTime ();
use PostScript::ScheduleGrid::XMLTV ();

my $dataFile = $ARGV[0] // 'data.xml';
my $outFile  = $ARGV[1] // 'listings.ps';

die "You must provide an XMLTV data file\n" unless -f $dataFile;

# Produce 3 days of listings starting tomorrow at 6am
my $start_date = DateTime->today(time_zone => 'local')
                         ->add(days => 1, hours => 6);
my $end_date = $start_date->clone->add(days => 3);

#---------------------------------------------------------------------
# Customize listings through program_callback:

my %favoriteShow = map { $_ => 1 } (
  'Castle',
  'MythBusters',
  'Person of Interest',
);

sub callback
{
  my ($p) = shift;

  $p->{category} = 'sports'
      if $p->{dd_progid} =~ /^SP/ or
          ($p->{xml}{category} and
           grep { $_->[0] =~ /^Sports.+(?:event|talk)$/ }
                @{$p->{xml}{category}});

  $p->{category} = 'fav' if $favoriteShow{$p->{show}}
      or ($p->{parser}->get_text($p->{xml}{desc}) // '') =~ /Caviezel/;
  # example of searching the description for specified text
} # end callback

#---------------------------------------------------------------------
my $tv = PostScript::ScheduleGrid::XMLTV->new(
  program_callback => \&callback,
  start_date       => $start_date,
  end_date         => $end_date,
  channel_settings => {
    '285 EWTN'               => { lines => 3 },
    'I16374.labs.zap2it.com' => { lines => 1 },
  },
);

$tv->parsefiles($dataFile);

#---------------------------------------------------------------------
say "Preparing grid";

my $grid = $tv->grid(
  categories => { fav    => 'Solid',
                  sports => [qw(Stripe  direction right)] },
  landscape  => 1,
  grid_hours => 6,
  (map { $_ => 18 } qw(left_margin right_margin top_margin bottom_margin)),
  cell_font_size => 8,
  line_height    => 11,
);

$grid->output($outFile);

# Local Variables:
# compile-command: "perl example.pl data.xml /tmp/listings.ps"
# End: