#!/usr/bin/env perl
use strict;
use warnings;
use utf8;
use Path::Tiny qw/ path /;
my $text =
path('t2/humour/by-others/hitchhiker-guide-to-star-trek-tng.txt')
->slurp_utf8;
sub prefix_lines
{
my $s = shift;
$s =~ s{^\s+}{}gms;
$s =~ s{$}{
}gms;
$s =~ s{([\[\]])}{\\$1}g;
return $s;
}
sub wrap_as_desc
{
my $s = shift;
return "\n\n[\n\n" . prefix_lines($s) . "\n\n]\n\n";
}
sub calc_new_para
{
my $para = shift;
if ( $para !~ m{:} or $para =~ m{:\n?\z} )
{
return wrap_as_desc($para);
}
else
{
$para =~ tr/()/[]/;
return $para;
}
}
sub process_scene
{
my $s = shift;
$s =~ s{^ +}{}gms;
$s =~ s{(^\n)((?:[\w\*\"][^\n]+\n)+)}{$1.calc_new_para($2)}egms;
return $s;
}
my $END = '* * * T h e E n d * * *';
$text =~ s{\A(.*?)^(SCENE 1:)}{wrap_as_desc($1) . $2}ems;
$text =~
s{^(?(?:SCENE (?\d+)|EPILOGUE):[^\n]*\n(?: +[^\n]*\n)*)(?.*?)(?=^(?:(?:SCENE|EPILOGUE)|(?:\s*\Q$END\E)))}
[
my ($start_line, $id, $body) = @+{qw(start_line id body)};
my $s_line =
defined($id)
? qq{\n\n\n\n}
: qq{\n\n\n\n}
;
$s_line
. wrap_as_desc($start_line) . "\n\n" . process_scene($body)
. "\n\n\n\n"
]egms;
$text =~ s{^(\s*\Q$END\E.*)\z}{
my $text = $1;
$text =~ tr/[]/()/;
qq{\n\n\n\n}
. wrap_as_desc($text)
. qq{\n\n\n\n}
}ems;
path('lib/screenplay-xml/txt/hitchhikers-guide-to-star-trek-tng.txt')
->spew_utf8(
qq{\n\n$text\n\n}
);