EBook-Generator
view release on metacpan or search on metacpan
lib/EBook/Generator/Exporter/PDF.pm view on Meta::CPAN
my ($self, $node) = @_;
my ($type, $opts, @subnodes) = @{$node};
my $name = ($opts->{'type'} eq 'ordered' ? 'enumerate' : 'itemize');
return
"\n\n".'\begin{'.$name.'}'."\n".
join('', map {'\item '.$self->transform_nodes($_)."\n\n"} @subnodes).
'\end{'.$name.'}'."\n\n";
},
'preformatted' => sub {
my ($self, $node) = @_;
my ($type, $opts, @subnodes) = @{$node};
return
"\n\n".'{\footnotesize\begin{lstlisting}{Name}'.
$self->transform_nodes(@subnodes).
'\end{lstlisting}}'."\n\n";
},
'quote' => sub {
my ($self, $node) = @_;
my ($type, $opts, @subnodes) = @{$node};
return '\textit{'.$self->transform_nodes(@subnodes)."}";
},
};
return $self;
}
sub writeEBook
{
my ($self, $ebook, $options) = @_;
$self->{'log'} = [];
$self->{'url'} = $ebook->{'url'};
$self->{'options'} = $options;
# used while processing
$self->{'has-section'} = 0;
# convert to latex
$self->{'meta'} = $ebook->{'meta'};
my $converted = $self->transform_nodes($ebook->{'data'});
my $tmpdir = File::Temp->newdir();
# write tex file
my $filename = $tmpdir->dirname()."/main.tex";
unlink($filename) if -f $filename;
my $fh = IO::File->new("> ".$filename);
binmode($fh);
print $fh $converted;
# create pdf
print "creating pdf...";
my $cmd =
# temporarily set path of local texmf tree to make
# it able to find garamond files ;)
'cd "'.$tmpdir->dirname().'"; '.
"TEXMFHOME='".$self->{'options'}->{'local-tex-tree-path'}."' ".
#EBook::Generator::Parser::getCommandPath('pdflatex').' '.
(-f '/usr/bin/pdflatex' ? '/usr/bin/pdflatex' : '/usr/texbin/pdflatex ').' '.
($ebook->{'options'}->{'debug'} == 1 ? () : '-interaction=batchmode').' '.
'main.tex'.
' 2>&1';
#' > /dev/null 2>&1';
my $output = `$cmd`;
$output .= `$cmd` if $self->{'has-section'}; # second time for table-of-contents
# copy pdf to final place
my $pdf_filename = $tmpdir->dirname().'/main.pdf';
my $final_filename = $self->{'final-dir'}.$ebook->{'meta'}->{'title'}.'.pdf';
my $copy_result = copy($pdf_filename, $final_filename);
push @{$self->{'log'}},
'dummy'
# 'filename = '.$filename.' (exist: '.(-f $filename).')',
# 'cmd = '.$cmd,
# 'cmd-output = '.$output,
# 'which-pdflatex = '.`which pdflatex`,
# 'pdf-filename = '.$pdf_filename.' (exist: '.(-f $pdf_filename).')',
# 'final-filename = '.$final_filename.' (exist: '.(-f $final_filename).')',
# 'copy-result = '.$copy_result.' (error: '.$!.')',
;
return $final_filename;
}
sub transform_nodes
{
my ($self, @nodes) = @_;
my $conv = '';
foreach my $node (@nodes) {
if (ref $node) {
my $type = $node->[0];
if (exists $self->{'handlers'}->{$type}) {
$conv .= $self->{'handlers'}->{$type}->($self, $node);
} else {
my ($type, $opts, @subnodes) = @{$node};
$conv .= $self->transform_nodes(@subnodes);
}
}
else {
$conv .= $self->transform_text($node);
}
}
return $conv;
}
sub transform_text
{
my ($self, $s) = @_;
$s =~ s/([\.\;\?\!\:])/$1 /g;
$s = decode_entities($s);
$s = latex_encode($s);
# make URLs shorter by adding split-marks
#$s =~ s/\/(?!\/)/\\-\/\\-/g;
return $s;
( run in 1.498 second using v1.01-cache-2.11-cpan-39bf76dae61 )