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

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