package Text::Format::Interview; use Moose; =head1 NAME Text::Format::Interview - Take a text interview transcript and format to html. =head1 VERSION Version 0.03 =cut our $VERSION = '0.03'; =head1 SYNOPSIS use Text::Format::Interview; my $txt = Text::Format::Interview->new(); my $html = $txt->process($string); Converts text of the form: # Interview between Fred Flintstone and Barney Rubble, 3rd April, 2000 BC Fred: [00:00:00] So, Barney, when did you decide to become a Flintstone? Barney: [00:00:10] Well Fred, I'm not actually a Flintstone, my surname is Rubble and I live in Bedrock. Into HTML, something like: # Interview between Fred Flintstone and Barney Rubble, 3rd April, 2000 BC
So, Barney, when did you decide to become a Flintstone?
This is intended as a pre-processor, so the header is using markdown here, but could equally be html. Alternatively if you specify a comma separated list of "interviewers" and "interviewees" at the top of the file to be processed, you'll get some css classes as well: # Interview between Fred Flintstone and Barney Rubble, 3rd April, 2000 BC interviewer: fred,wilma interviewee: barney,betty Fred: [00:00:00] So what's it like to be a flintstone? Barney: [00:00:05] I'm not a Flintstone, I'm a Rubble. What do you think Betty? Betty: [00:00:10] Yes Fred, you're confused. Wilma: [00:00:15] I'm so terribly embarrassed by my husband. Which ought to render to: # Interview between Fred Flintstone and Barney Rubble, 3rd April, 2000 BCinterviewer: fred, wilma
interviewee: barney, betty
So what's it like to be a flintstone?
I'm not a Flintstone, I'm a Rubble. What do you think Betty?
This gives us the ability to put pretty colours in the interview transcript with CSS, something like this: h2.interviewer > p { color: red } (or something far more tortorous if you need to Internet Explorer 6 support ...) =head1 FUNCTIONS =head2 process Takes the text, and spits out the html. =cut sub process { my ($self, $content) = @_; my $rendered = ''; # first let's make sure our newlines are consistent for the current platform. # regex ripped out of the cpan module File::LocalizeNewlines $content =~ s/(?:\015{1,2}\012|\015|\012)/\n/sg; my @content = split /\n\n/, $content; shift @content if $content[0] =~ /^$/; my ($interviewer) = $content[0] =~ /interviewer:\s?(.*)$/mi; $interviewer ||=''; my (@interviewers, @interviewees); eval { @interviewers = split /,\s?/,$interviewer; }; warn "No interviewers specified" if @_; my ($interviewee) = $content[0] =~ /interviewee:\s?(.*)$/mi; $interviewee ||= ''; eval { @interviewees = split /,\s?/,$interviewee; }; warn "No interviewees specified" if @_; my %speaker; $speaker{lc($_)} = 'class = "interviewee"' for @interviewees; $speaker{lc($_)} = 'class = "interviewer"' for @interviewers; my @first_para = split /\n/, $content[0]; $rendered .= $first_para[0] . "\n\n"; # interview title #remainder is metadata/ text description $rendered .= "";
$rendered .= $_ . "
\n" for @first_para[1 .. $#first_para];
$rendered .= "
$txt
\n\n"; } return $rendered; } =head1 AUTHOR Kieren Diment, C<<