Open Source im professionellen Einsatz
Linux-Magazin 08/2012
© Olga Yastremska, 123RF.com

© Olga Yastremska, 123RF.com

E-Books im Eigenbau

Gutenberg at Home

Fertige E-Books für den Kindle leicht gemacht: Das CPAN-Modul EBook::MOBI überführt das bewährte POD-Format für Perl-Dokumentation per Tastendruck in das digitale Mobi-Format für unterschiedliche mobile Endgeräte der Kindle-Familie und ihrer Ableger.

789

Meine Arbeiten an der Perl-Snapshot-Reihe beginnen regelmäßig mit einem Manuskript im POD-Format (Abbildung 1). Schließlich ist das bewährte Dokumentationsformat einfach zu tippen und zu lesen, und eine Reihe von Tools wandelt es problemlos um: in HTML, in Manual-Seiten, in Latex (und damit in PDF oder Postscript) oder in das vom Linux-Magazins gewünschte Format [2]. Mit dem CPAN-Modul »EBook::MOBI« ist es sogar möglich, aus POD Mobi-Dateien zu erzeugen und private Erzeugnisse als E-Books für Kindle-Lesegeräte und -Apps zu veröffentlichen.

Abbildung 1: Die POD-Datei mit dem Originalmanuskript dieses Artikels.

Cloud teilt aus

Dank einer Reihe von Mechanismen zur Verbreitung von E-Book-Dateien innerhalb Amazons Cloud und daran angeschlossener Endgeräte dauert es nicht lange, bis nach der Transformation in das proprietäre HTML-ähnliche Format selbst gefertigte E-Books auf Kindle und Android-Geräten, iPads oder iPhones erscheinen. Kurz: auf jeder Plattform, auf der Amazons Kindle-App läuft.

Die Abbildung 2 präsentiert das Android-Modell Galaxy 4.0 – ein telefonloses Smartphone, das einem iPod Touch nicht unähnlich aussieht – mit einer Neuerscheinung im Kindle-Store: dem aus dem Manuskript-POD der aktuellen Perl-Snapshot-Folge generierten E-Book. Die zugehörige Textansicht in Abbildung 3 zeigt, wie die Kindle-App die Mobi-Datei in ein ansprechendes digitales Layout verwandelt.

Abbildung 2: Die selbst gestrickte Mobi-Datei in der Rubrik "Neuerscheinungen" in der Kindle-App auf einem Galaxy 4.0 Android.

Abbildung 3: Der Text der Mobi-Datei ist hier in der Kindle-App auf dem Galaxy 4.0 Android im angepassten Layout zu sehen.

Ein Blick auf das Original-Manuskript in Abbildung 1 offenbart, dass die Redakteure meine Titelvorschläge oft umschreiben: Aus "Das feuerrote Kindle-Mobil" wurde so ein konservatives "Gutenberg at Home". Noch etwas fällt auf: Das POD-Format verfügt von Haus aus über kein Image-Tag, aber »EBook::MOBI« versteht das Pseudo-Tag

=image /Pfad/Image.jpg Beschreibung

und fügt die Bilddatei mit Bildtext in das E-Book ein. Doch wie wurde aus der POD-Datei ein digitales E-Book im Amazon-Format?

Listing 1 benötigt drei CPAN-Module, »Sysadm::Install« , »Pod::Parser« und »EBook::MOBI« , die der Aufruf

Listing 1

pod2mobi

01 #!/usr/local/bin/perl -w
02
03 ###################
04 package MyParser;
05 ###################
06 our @ISA = qw(Pod::Parser);
07
08 ###########################################
09 sub title {
10 ###########################################
11   my( $self ) = @_;
12
13   return $self->{ __title };
14 }
15
16 ###########################################
17 sub command {
18 ###########################################
19   my ($parser, $command,
20       $paragraph, $line_num) = @_;
21
22   $paragraph =~ s/\n+$//;
23
24   if( $command eq "head1" ) {
25     $parser->{ __title } = $paragraph if
26     !defined $parser->{ __title };
27   }
28 }
29
30 ###################
31 package main;
32 ###################
33 use strict;
34 use Sysadm::Install qw( slurp );
35 use EBook::MOBI;
36 use Pod::Parser;
37
38 my( $pod_file ) = @ARGV;
39
40 if( !defined $pod_file ) {
41     die "usage: $0 file.pod";
42 }
43
44 my $parser = MyParser->new();
45 $parser->parse_from_file(
46     $pod_file, "/dev/null" );
47
48 my $book = EBook::MOBI->new();
49 my $pod = slurp ( $pod_file,
50                   { utf8 => 1 } );
51
52 $book->set_author( "Mike Schilli" );
53 $book->set_title( $parser->title() );
54
55 $book->set_encoding(':encoding(UTF-8)');
56
57 $book->add_pod_content($pod, 'pagemode');
58 $book->make();
59 $book->save();
perl -MCPAN -e 'install Sysadm::Install, EBook::MOBI, Pod::Parser'

vom CPAN-Mirror auf den Rechner holt und installieren lässt. Damit ist das Handwerkszeug vorhanden, um aus einer auf der Kommandozeile übergebenen POD-Datei ein E-Book für Kindle-Apps namens »book.mobi« zu generieren.

Parser-Klasse sucht Titel

Eigentlich benötigt »EBook::MOBI« in Listing 1 nur die Zeilen ab »package main« . Da aber »pod2mobi« den Inhalt der ersten »=head1« -Zeile des POD extrahiert und mit »set_title()« zum Titel des E-Books erhebt, definiert »package MyParser« ab Zeile 4 eine von »Pod::Parser« abgeleitete Klasse. Ihre einzige Aufgabe ist es, im Callback »command« ab Zeile 17 zu überprüfen, ob es sich beim aktuellen POD-Kommando um die erste Hauptüberschrift vom Typ »=head1« handelt, und falls ja, deren Inhalt in der Instanzvariablen »__title« zu sichern.

Die Methode »title()« ab Zeile 9 spielt diesen Inhalt dann etwa dem Hauptprogramm zu. Dieses ruft die Methode »parse_from_file()« des Parsers auf und übergibt den Namen der POD-Datei und die Datei »/dev/null« , damit beim Durchforsten des POD-Codes keine Ausgaben auf »Stdout« erfolgen.

Die Methoden »set_author()« und »set_title()« der Klasse »EBook::MOBI« setzen Autor und Titel des Mobi-Dokuments. Damit Umlaute des UTF-8-kodierten POD-Textes im E-Book ordentlich erscheinen, setzt Zeile 55 die Kodierung mit »set_encoding()« auf »UTF-8« . Fehlt noch, den POD-Code mit »add_pod_content()« zum E-Book hinzuzufügen. Der zweite Parameter »pagemode« veranlasst den Konverter nach jeder »=head1« -Überschrift zum Seitenumbruch. Ein »make()« generiert das Mobi-Format. Die in Zeile 59 aufgerufene Methode »save()« sichert es unter dem Namen »book.mobi« .

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 4 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Get it on Google Play

Deutschland

Ähnliche Artikel

comments powered by Disqus

Ausgabe 10/2014

Digitale Ausgabe: Preis € 6,40
(inkl. 19% MwSt.)

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.

Insecurity Bulletin

Insecurity Bulletin

Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...

Linux-Magazin auf Facebook