umlaute2html.pl

Code Index:



Name

umlaute2html.pl - ersetzt Umlaute und Sonderzeichen in HTML-Dateien


Zusammenfassung

umlaute2html.pl [-e Dateiendung] [-c] [-b Dateiendung] [-s] [-h] Datei(en)/Verzeichnis(se)


Zweck

umlaute2html.pl ersetzt Umlaute und und Sonderzeichen in HTML-Dateien durch HTML-konforme Ausdrücke. Werden Verzeichnisse als Parameter übergeben, erfolgt eine rekursive Abarbeitung dieser.

Mit den Schalter -e kann die Ändung der Quelldateien als regulärer Ausdruck, z.B. \.html?$ für .html und .htm, spezifiziert werden.

-c erzeugt Sicherheitskopien der geänderten Dateien. -b ermöglicht dabei von .bak abweichende Dateiendungen.

-s unterdrückt die Ausgabe von Statusmeldungen.

-h gibt einen kurzen Hilfetext aus.


Versionshistorie

$Log: umlaute2html.pl.html,v $

Revision 1.1 2005-01-23 14:04:20 carsten

- aus dem Quellcode automatisch mit perltidy erzeugte Dokumentationen

- ursprünglicher Speicherort: /

Revision 1.1 2004/06/27 18:10:35 carsten

- ausführliche Dokumentation für umlaute2html.pl hinzugefügt

Revision 1.2 2004/06/27 17:51:24 carsten - Version 2.1 - manpage hinzugefügt - Quelltext mit perltidy formatiert


Programmname und Autor

umlaute2html.pl v2.1

von Carsten Grohmann mail_an_carstengrohmann.de

http://www.carstengrohmann.de


Version

Erstellungsdatum: 27. Juni 2004

$Id: umlaute2html.pl.html,v 1.1 2005-01-23 14:04:20 carsten Exp $


Copyright

Copyright (c) 2003-2004 Carsten Grohmann

Dieses Softwarepaket enthält freie Software. Sie kann entsprechend den Bedingungen der GNU General Public License Version 2 oder höher, veröffentlicht durch die Free Software Foundation, vertrieben und/oder modifiziert werden.

Details dazu befinden sich unter http://www.fsf.org/licenses/licenses.html.


#!/usr/bin/perl
#
# umlaute2html - ersetzt Umlaute und Sonderzeichen durch HTML-konforme
#                Ausdrücke in alllen übergebenen Dateien und Verzeichnissen
#
# Version: 2.1
#
# Lizenz:  GPL
#
# Autor:   Carsten Grohmann
#
# Aufruf des Programmes:
#       perl umlaute2html.pl [Optionen] [Dateien|Verzeichnis(se)]
# oder  ./umlaute2html.pl [Optionen] [Dateien|Verzeichnis(se)]

use strict;
use File::Find;
use Getopt::Std;

# Programmversion
my $version = "2.1";

# Originale Dateien sichern
my $safe_old_files = "no";

# Endung für Sicherheitskopien
my $backup_extention = ".bak";

# Endung der zu bearbeitenden Dateien
my $file_extention = '\.html?$';

# Array mit allen zu ändernden Dateien
my @htmlfiles;

# Erweiterte Ausgaben anzeigen
my $silent = "no";

# Hash für Programmargumente
my %opts;

# Hash für Ersetzungen
my %replace = (
    'ä'       => 'ä',
    'ö'       => 'ö',
    'ü'       => 'ü',
    'Ä'       => 'Ä',
    'Ö'       => 'Ö',
    'Ü'       => 'Ü',
    'ß'       => 'ß',
    '§'       => '§',
    '¹'       => '¹',
    '²'       => '²',
    '³'       => '³',
    '¤'       => '€',
    '¢'       => '¢',
    '\(c\)'   => '©',
    '\(C\)'   => '©',
    '\(r\)'   => '®',
    '\(R\)'   => '®',
    '\(tm\)'  => '™',
    '\(TM\)'  => '™',
    '¶'       => '¶',
    '°'       => '°',
    '[\t ]+$' => ''           # Leerzeichen und Tabs am Zeilenende entfernen
);

sub output
{
    print @_ if ( $silent eq "no" );

}

sub usage
{
    print(  "usage $0 [-e Dateiendung] [-c] [-b Dateiendung] [-h] [-s]\n"
          . " -e Endung   Endung der zu bearbeitenden Dateien als regulärer "
          . "Ausdruck\n"
          . "             zum Beispiel $file_extention für \".html\" und "
          . "\".htm\"\n"
          . " -c          Sicherheitskopie erstellen\n"
          . " -b Endung   Endung der Sicherheitskopie\n"
          . " -s          Keine detailierten Ausgaben\n"
          . " -h          diesen Text anzeigen\n"
          . "Zusätzlich enthält dieses Skript eine integrierte Dokumentation.\n"
          . "Sie kann mit pod2(html|man|latex|text) angezeigt werden.\n"
          . "Beispiel: \"pod2man getweblogfiles.pl | man -l -\" "
          . "zeigt die Dokumentation\n"
          . "als man page formatiert an.\n" );
    exit $_;
}

# ersetzt alle in %replace gefundenen Ausdrücke in der übergebenen Datei
sub fine_html
{

    # Dateiname
    my $file = @_[0];

    # Flag für Änderungen des Inhalts
    my $changed = 0;

    # Inhalt der Datei
    my @content;

    output("Verarbeite $file ");

    # Datei einlesen
    open( FH, "<$file" ) || die "open to read $file failed";
    @content = <FH>;
    close(FH);

    # Inhalt bearbeiten
    foreach my $key ( keys %replace )
    {
        if ( grep( /$key/, @content ) )
        {
            s/$key/$replace{$key}/g for @content;
            $changed = 1;
        }
    }

    # Datei geändert?
    if ( $changed == 1 )
    {
        output(" Schreibe Änderungen ");
        rename( $file, $file . $backup_extention )
          if ( $safe_old_files eq "yes" );
        open( FH, ">$file" ) || die "open to write $file failed";
        print FH @content;
        close(FH);
    }

    output("ok\n");
}

sub find_html
{
    my $file = $_;

    # zurück wenn keine .html-Datei
    return unless ( -f $_ ) && ( $file =~ /$file_extention/ );
    push( @htmlfiles, $File::Find::name );
}

# Programmnamen und Version ausgeben
print("umlaute2html.pl Version $version  (c) 2003-2004 Carsten Grohmann\n");

# Keine Argumente? -> nutze aktuelles Verzeichnis
@ARGV = ('.') unless @ARGV;

# Argumente verarbeiten
getopts( 'e:cb:sh', \%opts ) || usage(1);

# Hilfe ausgeben
usage(0) if ( $opts{'h'} );

# Dateiendung setzen
$file_extention = $opts{'e'} if ( $opts{'e'} );

# Sicherheitskopieen erstellen
$safe_old_files = "yes" if ( $opts{'c'} );

# Dateiendung der Sicherheitskopien setzen
$backup_extention = $opts{'b'} if ( $opts{'b'} );

# Erweiterte Ausgaben unterdrücken
$silent = "yes" if ( $opts{'s'} );

# Dateien suchen
find( \&find_html, @ARGV );

# gefundene Dateien bearbeiten
foreach (@htmlfiles) { fine_html($_) };

# Skript beenden
exit;

  #-----------------------------------------------------------------------
  # END OF SCRIPT
  #-----------------------------------------------------------------------

__END__