l2h-init.pl

Ach, was habe ich doch für hässliche wörter in meinem wortschatz gefunden, als ich mit diesem LaTeX2html ein größeres LaTeX-dokument in eine hübsche HTML-versjon umgewandelt habe und auch wollte, dass die dabei generierten dateien andere namen als node1.html bis node112.html bekommen.

Was sich hinter latex2html -init-file l2h-init.pl Handbuch.tex verbirgt, ist das folgende perl-skript, das ein paar konfigurationen und eine kleine huck-funkzjon für die erzeugung der dateinamen enthält. Die kommentare habe ich mal dringelassen, zur steigerung des genusses:

#!/usr/bin/perl
# -*- coding: iso-8859-1 -*-
#
# Wer sich über das Encoding wundert. Das ist das Encoding, in dem
# mir dieses LaTeX2HTML die Strings als Argumente rüberschiebt, und so
# kann ich am einfachsten ein paar REs drauf loslassen. Das ist noch
# eines der kleineren (und dokumentierten) Ärgernisse, unten stehen 
# noch ein paar Hinweise auf die wirklich nervigen "Features".
#
# $Id: l2h-init.pl,v 1.8 2010/12/03 20:46:13 elias Beta $

# +---------------+
# ! EINSTELLUNGEN !
# +---------------+

$TITLE = 'Startseite';
$DESTDIR = 'html';
$NO_SUBDIR = 0;
$MAX_SPLIT_DEPTH = 8;
$MAX_LINK_DEPTH = 2;
$SHOW_SECTION_NUMBERS = 1;
$HTML_VERSION = '4.0';
$LOCAL_ICONS = 1;
$SHORT_INDEX = 1;
$NUMBERED_FOOTNOTES = 1;
$ADDRESS = 'Handbuch für die <a href="http://www.tamagothi.de/software/virtuelle-zockhalle/">Virtuelle Zockhalle</a> von <a href="http://www.tamagothi.de/">Elias Schwerdtfeger</a>';
$INFO = 0;
$NETSCAPE_HTML = 1;
$CHILDLINE = "";

# +------------------+
# ! EIGENER ICONSATZ ! 
# +------------------+

$BOTTOM_NAVIGATION = 0;
$AUTO_NAVIGATION = 0;
$TOP_NAVIGATION = 1;

# Um den Pfad zu den Icons relativ anzugeben, muss ich ihn relativ
# zum Zielverzeichnis angeben. Hat mal wieder keiner für nötig ge-
# halten, so etwas zu dokumentieren, denn wir probieren ja alle so
# gern lustige Dinge aus... :(
$ALTERNATIVE_ICONS = '../Icons';

# Arrgh! Es saugt!!
# 17411 Skriptzeilen im Kernprogramm (da kommen noch Module dazu), 
# und die Jauche ist nicht einmal dazu imstande, die Größe der
# verwendeten eigenen Icons irgendwie automatisch zu ermitteln!
# Boah, wie schlecht! m(
%iconsizes = ( 'up'       => 'WIDTH="32" HEIGHT="32"',
	       'next'     => 'WIDTH="32" HEIGHT="32"',
	       'previous' => 'WIDTH="32" HEIGHT="32"',
	       'contents' => 'WIDTH="32" HEIGHT="32"',
	       'index'    => 'WIDTH="32" HEIGHT="32"' );

# +--------------------+
# ! BESSERE DATEINAMEN !
# +--------------------+
#
# Wer eine Ahnung davon bekommen möchte, wie Scheiße schmeckt, bekommt
# sie vermutlich beim Lesen der folgenden Kommentare, die ich einfach
# mal so drinstehen lasse, wie sie mir beim Coden gekommen sind.

$CUSTOM_TITLES = 1;

my %titleused = ( 'index' => 1 );
sub custom_title_hook
{
    my ($k) = @_;
    my ($tmp, $m, $l);

    # HTML-Tags entfernen
    # Der Titel der Seite wird doch tatsächlich mit vollständigem
    # HTML-Markup übergeben. WTF?! Unfassbar!
    $k =~ s/\<[^\>]*\>//g;

    # Umlaute behandeln und alles in Kleinbuchstaben umwandeln.
    # (Dafür brauche ich das oben erwähnte Encoding...)
    $k =~ s/[Ää]/ae/g;
    $k =~ s/[Öö]/oe/g;
    $k =~ s/[Üü]/ue/g;
    $k =~ s/ß/ss/g;
    $k = lc $k;

    # Alles, was keine Buchstaben oder Ziffern sind, wird zu Strichen.
    $k =~ s/[^a-z0-9]+/-/g;

    # Paranoia: Einleitende und abschließende Striche werden entfernt.
    $k =~ s/^\-+//;
    $k =~ s/\-+$//;

    # Paranoia: Mehrfache Striche werden einfach.
    $k =~ s/\-{2,}/-/g;

    # HASSKAPPE! Der Dateiname wird auf 32 Zeichen runtergekürzt, und
    # fünf Zeichen davon sind bereits die Extension .html, so dass mir
    # noch 27 Zeichen bleiben. 32! WTF! 32?! Posix wären 14, und DOS 
    # wären 12 (mit Extension), was soll diese verkackte Beschränkung?
    #
    # Und dokumentieren muss man das ja nirgends, wer eine Doku will,
    # kann ja einfach in den Code schauen, wenn er Probleme hat. Das
    # Folgende (ab Zeile 9363 im Code) ist doch Dokumentation genug:
    #
    # [...]
    # if ($title) {
    #   #ensure no more than 32 characters, including .html extension
    #   $title =~ s/^(.{1,27}).*$/$1/;
    #	++$OUT_NODE;
    #	join("", ${PREFIX}, $title, $EXTN);
    # } else { 
    # [...]
    #
    # Kann mal jemand für mich diese Leute erschlagen?! Aber bitte nicht
    # so, dass sie schnell sterben... :(
    $k =~ s/^(.{1,27})/$1/g;

    # Der Paranoiacode gegen doppelte Titel ist jetzt noch aufwändiger,
    # da er Platz für die Nummerierung lassen muss. Also wird so noch
    # ein bisschen mehr runtergekürzt, wenn es diesen Titel schon einmal
    # gab. Und dann der Paranoiacode gegen doppelte Titel, denn dieser
    # Fehler wird von LaTeX2HTML nicht behandelt. Ein wirklich rottiges
    # Stück jauchedurchtränkter Köttel ist dieses LaTeX2HTML!
    if ($titleused{$k})
    {
	$k =~ s/^(.{1,24})/$1/g;
	$m = 2;
	$tmp = $k . "-$m";
	while ($titleused{$tmp})
	{
	    ++$m;
	    $tmp = $k . "-$m";
	}
	$k = $tmp;
    }
    $titleused{$k} = 1;

    # Nun sollte es sicher genug sein, und ich habe für alle Seiten
    # einen meistens menschenlesbaren Dateinamen, wenn der nicht
    # gerade verstümmelt runtergekürzt wurde. Bäh, das ist doch wirk-
    # lich keine so ungewöhnliche Forderung!
    return $k;
}

# WO ZUM HENKER GIBT ES EIGENTLICH EINE _VOLLSTÄNDIGE_ DOKUMENTATION
# FÜR DIESES HORRORROTTIGE LATEX2HTML?! ICH KENNE WIRKLICH SCHÖNERE DINGE
# ALS DAS HERAUSFINDEN UNDOKUMENTIERTER "FEATURES" DURCH PROBELÄUFE UND
# DURCHLESEN DER QUELLTEXTE.

1;

Was ich von diesem LaTeX2HTML halte und warum ich diese wenig schmeichelhafte meinung zu diesem widerspenstigen stück softwäjhr habe, sollte sich auch dem weniger perl-kundigen beim lesen erschlossen haben.