I hacked together a first, unfinished, largely untested prototype converter. This goes into the base directory of https://sourceforge.net/p/pdl/pdl-book/ci/master/tree/ as make_epub.pl:

#!/usr/bin/env perl use v5.36; use strict; use warnings; use Carp; use App::Pod2Epub; #use Archive::Zip; use GD; use MIME::Base64; use English; my $parser = App::Pod2Epub->new(); my @full; my @subfiles; { # Read and parse TOC pod my @lines = _readFile('PDL/Book.pod'); my $istoc = 0; foreach my $line (@lines) { if($line =~ /^\=over/) { $istoc = 1; #push @full, $line; next; } elsif($line =~ /^\=back/) { $istoc = 0; #push @full, $line; next; } elsif($istoc && $line =~ /^\=item/) { my $subfile = ''; if($line =~ /\<(.+?)\|/) { $subfile = $1; $line =~ s/.*\>\ //; $subfile =~ s/\:\:/\//g; $subfile .= '.pod'; if(!-f $subfile) { warn("$subfile does not exist"); } else { push @subfiles, $subfile; } } push @full, $line; next; } push @full, $line; } push @full, ''; } { # Process chapters foreach my $subfile (@subfiles) { my @lines = _readFile($subfile); foreach my $line (@lines) { if($line =~ /^\=for\ html/) { if($line =~ /\<img.*src\=\"(.+?)\"/) { my $img = 'PDL/Book/' . $1; if(-f $img) { my $imgdata = _slurpBinFile($img); $imgdata = encode_base64($imgdata, ''); my $imggd = GD::Image->new($img); my ($width, $height) = $imggd->getBounds(); my $realline = '=for html <img width="' . $wid +th . '" height="' . $height . '" src="data:image/png;base64, ' . $img +data . '"/>'; push @full, $realline; } else { warn("Missing image $img in file $subfile"); push @full, "Missing image: $img"; } next; } else { warn("Unknown 'for html' tag: $line in $subfile"); next; } } push @full, $line; } push @full, ''; } } { # Write complete POD file open(my $ofh, '>', 'complete_book.pod') or croak($!); foreach my $line (@full) { print $ofh $line, "\n"; } close $ofh; } if(0){ # Convert file to epub open(my $ifh, '<', 'complete_book.pod') or croak($!); open(my $ofh, '>', 'complete_book.epub') or croak($!); binmode $ofh; $parser->output_fh($ofh); $parser->parse_file($ifh); close $ifh; close $ofh; } `pod2epub complete_book.pod -o complete_book.epub`; #{ # Add images to ZIP file # my $zip = Archive::Zip->new('complete_book.epub'); # foreach my $img (@images) { # $zip->addFile('PDL/Book/' . $img => $img); # } # $zip->overwrite(); #} sub _readFile($fname) { my @lines; open(my $ifh, '<', $fname) or croak($!); while((my $line = <$ifh>)) { chomp $line; push @lines, $line; } close $ifh; return @lines; } sub _slurpBinFile($fname) { # Read in file in binary mode, slurping it into a single scalar. # We have to make sure we use binmode *and* turn on the line termi +nation variable completly # to work around the multiple idiosynchrasies of Perl on Windows open(my $fh, "<", $fname) or croak("$ERRNO"); local $INPUT_RECORD_SEPARATOR = undef; binmode($fh); my $data = <$fh>; close($fh); return $data; }

Basically, it concatenates all chapters, and inlines all images. There's a lot more to do to make it pretty and more readable (especially the code sections) and fix some encoding issues. But i do get a mostly usable book with chapters, subchapters, pretty pictures and about 226 pages (default font size on my Boox ereader), including a chapter called "POD ERRORS" at the very end ;-)

Also, i still need to add all the .pl files as their own chapter at the very end of the book, so it's a COMPLETE reference.

Edit: Forgot to say, this is a work in progress, and more posts will follow. But it's a good start for what is, for me, equivalent to a "My First Epub generator" picture book ("with simple, large letters for a first forray into the world of written words")...

PerlMonks XP is useless? Not anymore: XPD - Do more with your PerlMonks XP
Also check out my sisters artwork and my weekly webcomics

In reply to Re^4: PDL Book as epub? by cavac
in thread PDL Book as epub? by cavac

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.