--- a/iconv.pl Sat Mar 07 13:36:54 2009 +0100
+++ b/iconv.pl Sat Mar 07 13:37:26 2009 +0100
@@ -10,164 +10,172 @@
use File::Basename;
$ENV{LANG} = "C";
-delete @ENV{grep /^LC_/, keys %ENV};
+delete @ENV{ grep /^LC_/, keys %ENV };
-my $ME = basename $0;
+my $ME = basename $0;
my $CHARSETS = [qw(cp437 cp850 latin1)];
-my $_ok = param(".ok");
-my $_redo = param(".redo");
+my $_ok = param(".ok");
+my $_redo = param(".redo");
my $_download = param(".download");
-my $charset = param("charset");
+my $charset = param("charset");
my $filename = param("filename");
-my $outfile = param("outfile");
-my $infile = param("infile");
-my $src = param("src");
+my $outfile = param("outfile");
+my $infile = param("infile");
+my $src = param("src");
# sanitize the filenames
map { s{[/;&<>]}{}g; $_ = "/tmp/$ME.$_" } ($infile, $outfile);
-my $STYLE = "";
+my $STYLE = "";
my @HEADER = (
- -title => "UTF8-Konverter",
- -style => {-code => $STYLE},
- -encoding => "utf-8",
+ -title => "UTF8-Konverter",
+ -style => { -code => $STYLE },
+ -encoding => "utf-8",
);
-my $FOOTER = div({-align => "right"}, "Scripting © 2008 Heiko Schlittermann");
+my $FOOTER =
+ div({ -align => "right" }, "Scripting © 2008 Heiko Schlittermann");
END {
- unlink grep { -M > 1 } glob "/tmp/$ME.*";
+ unlink grep { -M > 1 } glob "/tmp/$ME.*";
}
# Quelltext anzeigen
if (defined $src) {
- if ($src eq "html") {
- open(my $this, "perltidy --html --st $0|");
- print header(-charset => "utf-8"),
- <$this>;
- exit 0;
- }
+ if ($src eq "html") {
+ open(my $this, "perltidy --html --st $0|");
+ print header(-charset => "utf-8"), <$this>;
+ exit 0;
+ }
- open(my $this, $0);
- print header(-charset => "utf-8", -type => "text/plain"),
- <$this>;
- exit 0;
+ open(my $this, $0);
+ print header(-charset => "utf-8", -type => "text/plain"), <$this>;
+ exit 0;
}
# download nach preview
if ($_download && $outfile && $filename) {
- open(my $fh, $outfile) or do {
- print header(-charset => "utf-8"),
- start_html(@HEADER),
- h1("Download"),
- "Sorry, Downloadfile $outfile: $!",
- end_html;
- exit 0;
- };
+ open(my $fh, $outfile) or do {
+ print header(-charset => "utf-8"),
+ start_html(@HEADER),
+ h1("Download"),
+ "Sorry, Downloadfile $outfile: $!",
+ end_html;
+ exit 0;
+ };
- print header(-type => "application/octet-stream",
- -attachment => $filename),
- <$fh>;
- exit 0;
-
+ print header(
+ -type => "application/octet-stream",
+ -attachment => $filename
+ ),
+ <$fh>;
+ exit 0;
}
-
# upload und preview
if (($_ok || $_redo) && ($filename && $charset)) {
- my $in;
- my $download;
- if ($_ok) { # first time, copy the upload to some tmp file
- ($in, $infile) = tempfile("/tmp/$ME.in.XXXXXX");
- local $/ = \10240;
- print $in $_ while <$filename>;
- close($in);
- close($filename);
+ my $in;
+ my $download;
+ if ($_ok) { # first time, copy the upload to some tmp file
+ ($in, $infile) = tempfile("/tmp/$ME.in.XXXXXX");
+ local $/ = \10240;
+ print $in $_ while <$filename>;
+ close($in);
+ close($filename);
- ($download, $outfile) = tempfile("/tmp/$ME.out.XXXXXX");
- }
- elsif ($_redo) { # redo - we read our saved orignal file
- # we can recycle the outfile
- open($download, ">$outfile");
- }
+ ($download, $outfile) = tempfile("/tmp/$ME.out.XXXXXX");
+ }
+ elsif ($_redo) { # redo - we read our saved orignal file
+ # we can recycle the outfile
+ open($download, ">$outfile");
+ }
- open($in, $infile) or die "$infile: $!";
-
+ open($in, $infile) or die "$infile: $!";
- require Text::Iconv;
- my $converter = new Text::Iconv $charset => "utf-8";
+ require Text::Iconv;
+ my $converter = new Text::Iconv $charset => "utf-8";
- my @lines;
- my $last = 0;
- while (<$in>) {
- s/\r?\n$//;
- $_ = $converter->convert("$_\n");
- die "Konvertierungsproblem in Zeile $." if not defined $_;
- print $download $_;
- $ENV{LC_CTYPE} = "de_DE.UTF-8";
- if (eof || (@lines < 30 and ($. < 4 || /[^a-z0-9[:punct:][:space:]]{1,3}/i))) {
- push @lines, " : ", substr("." x ($. - $last), 0, 80), "\n" if $. - $last > 1;
- push @lines, sprintf "%4d: $_", $.;
- $last = $.
- }
- }
+ my @lines;
+ my $last = 0;
+ while (<$in>) {
+ s/\r?\n$//;
+ $_ = $converter->convert("$_\n");
+ die "Konvertierungsproblem in Zeile $." if not defined $_;
+ print $download $_;
+ $ENV{LC_CTYPE} = "de_DE.UTF-8";
+ if (eof
+ || (@lines < 30 and ($. < 4 || /[^a-z0-9[:punct:][:space:]]{1,3}/i))
+ )
+ {
+ push @lines, " : ", substr("." x ($. - $last), 0, 80), "\n"
+ if $. - $last > 1;
+ push @lines, sprintf "%4d: $_", $.;
+ $last = $.;
+ }
+ }
- # jetzt mal den Filenamen ermitteln, wie er nach der Konversion aussehen soll
- # das können wir nicht vorher machen, weil $file da auch noch ein Filehandle
- # darstellt, welches wir so einfach nicht modifizieren können
- $filename =~ y/\\/\//;
- $filename = basename $filename;
- $filename =~ s/(\..+?)$/.utf8$1/
- or $filename .= ".utf8";
+ # jetzt mal den Filenamen ermitteln, wie er nach der Konversion aussehen soll
+ # das können wir nicht vorher machen, weil $file da auch noch ein Filehandle
+ # darstellt, welches wir so einfach nicht modifizieren können
+ $filename =~ y/\\/\//;
+ $filename = basename $filename;
+ $filename =~ s/(\..+?)$/.utf8$1/
+ or $filename .= ".utf8";
- # die Namen der tmp-Files kürzen
- map { s/\/tmp\/\Q$ME\E\.// } $infile, $outfile;
+ # die Namen der tmp-Files kürzen
+ map { s/\/tmp\/\Q$ME\E\.// } $infile, $outfile;
- print header(-charset => "utf-8"),
- start_html(@HEADER),
- div({-align => "right"}, "[ " . a({-href => url(-query => 0)}, "home") . " ]"),
- h3("Preview"),
- start_form,
- "von: ",
- popup_menu(-name => "charset", -values => $CHARSETS, -onChange => "submit()"),
- submit(-name => ".redo", -value => "Los!"),
- hidden(-name => "filename", -value => $filename),
- hidden(-name => "infile", -value => $infile),
- hidden(-name => "outfile", -value => $outfile),
- hidden(-name => ".redo", -value => 1),
- end_form,
- pre( "\n", @lines ),
- br,
- a({-href => url(-query => 0) . "?.download=1;outfile=$outfile;filename=$filename"},
- "download " . escapeHTML($filename)),
- hr,
- $FOOTER,
- end_html;
- exit 0;
+ print header(-charset => "utf-8"), start_html(@HEADER),
+ div({ -align => "right" },
+ "[ " . a({ -href => url(-query => 0) }, "home") . " ]"),
+ h3("Preview"), start_form, "von: ",
+ popup_menu(
+ -name => "charset",
+ -values => $CHARSETS,
+ -onChange => "submit()"
+ ),
+ submit(-name => ".redo", -value => "Los!"),
+ hidden(-name => "filename", -value => $filename),
+ hidden(-name => "infile", -value => $infile),
+ hidden(-name => "outfile", -value => $outfile),
+ hidden(-name => ".redo", -value => 1), end_form, pre("\n", @lines), br,
+ a(
+ {
+ -href => url(-query => 0)
+ . "?.download=1;outfile=$outfile;filename=$filename"
+ },
+ "download " . escapeHTML($filename)
+ ),
+ hr,
+ $FOOTER,
+ end_html;
+ exit 0;
}
# noch nichts angegeben
if (!$_ok || !$filename) {
- print header(-charset => "utf-8"),
- start_html(@HEADER),
- h1("Heute schon den Ötzi nach UTF-8 konvertiert?"),
- fieldset(
- legend("Upload"),
- start_multipart_form,
- table(
- Tr(td("File"), td(filefield(-name => "filename"))),
- Tr(td("Zeichensatz"), td(popup_menu(-name => "charset", -values => $CHARSETS))),
- Tr(td(), td(submit(-name => ".ok", -value => "Los!"))),
- ),
- end_multipart_form,
- ),
- $FOOTER,
- end_html;
- exit 0;
+ print header(-charset => "utf-8"),
+ start_html(@HEADER), h1("Heute schon den Ötzi nach UTF-8 konvertiert?"),
+ fieldset(
+ legend("Upload"),
+ start_multipart_form,
+ table(
+ Tr(td("File"), td(filefield(-name => "filename"))),
+ Tr(
+ td("Zeichensatz"),
+ td(popup_menu(-name => "charset", -values => $CHARSETS))
+ ),
+ Tr(td(), td(submit(-name => ".ok", -value => "Los!"))),
+ ),
+ end_multipart_form,
+ ),
+ $FOOTER,
+ end_html;
+ exit 0;
}
print header, start_html, h1("Internal Error."), Dump, end_html;