#!/usr/bin/perl -w # file KLEIDER/web/src/sitestyle/clean_css.pl # Entfernt Kommentare und Leerzeichen aus CSS-Dateien # 2011-07-15 Herbert Schiemann use utf8; # Dieser Quelltext ist utf-8-kodiert use Herbaer::Readargs; # read_args () binmode (STDIN, ":encoding(utf-8)"); binmode (STDOUT, ":encoding(utf-8)"); binmode (STDERR, ":encoding(utf-8)"); my $args = { "[cnt]verbose" => undef, "in" => undef, # Eingabedatei, default STDIN "out" => undef, # Ausgabedatei, default STDOUT "encoding_in" => "utf-8", # Kodierung der Eingabe "encoding_out" => "utf-8", # Kodierung der Ausgabe "imageprefix" => "", # Präfix für relative Bild-Verweise }; # gibt die Version nach STDOUT aus sub version { print << 'VERSION'; clean_css.pl Entfernt Kommentare und Leerzeichen aus CSS-Dateien Version 2013-06-28 2010, 2011, 2013 Herbert Schiemann GPL 2 oder neuer VERSION }; $args -> {"[sr]version"} = sub { version (); exit 0; }; $args -> {"[sr]help"} = sub { version (); print_message_with_values (<<"HELP", $args); $0 --help zeigt diese Hilfe an $0 --version zeigt die Programm-Version an $0 [option]... --verbose erhöht den Umfang der STDERR-Ausgabe --no_verbose unterdrückt die STDERR-Ausgabe --in IN Dateipfad der Eingabedatei \${in} --out OUT Dateipfad der Ausgabe-Datei \${out} --encoding_in ENCODING_IN Kodierung der Eingabe \${encoding_in} --encoding_out ENCODING_OUT Kodierung der Eingabe \${encoding_out} --imageprefix IMAGEPREFIX Präfix für relative Bildverweise \${imageprefix} HELP exit 0; }; # help read_args ($args); my $hin; # Handle der Eingabe my $hout; # Handle der Ausgabe my $nc_hin; # ist $hin zu schließen? my $nc_hout; # ist $hout zu schließen? open_files($args) or die; clean_css ($args, $hin, $hout); close_files($args); sub open_files { my $args = shift; my $verb = $args -> {"[cnt]verbose"}; my $fnin = $args -> {"in"} || "-"; my $fnout = $args -> {"out"} || "-"; print STDERR "clean_css $fnin -> $fnout\n" if $verb; my $enc = $args -> {"encoding_in"}; if ($fnin eq "-") { $hin = STDIN; binmode ($hin, ":raw:encoding($enc)"); } else { open ($hin, "<:encoding($enc)", $fnin) or do { print STDERR "Kann Eingabedatei \"$fnin\" nicht öffnen: $!\n" if $verb; return 0; }; $nc_hin = 1; } $enc = $args -> {"encoding_out"}; if ($fnout eq "-") { $hout = STDOUT; binmode ($hout, ":raw:encoding($enc)"); } else { open ($hout, ">:encoding($enc)", $fnout) or do { print STDERR "Kann Ausgabedatei \"$fnout\" nicht öffnen: $!\n" if $verb; return 0; }; $nc_hout = 1; } 1; } # open_files sub close_files { close ($hin) if $nc_hin; close ($hout) if $nc_hout; } # close_files # entfernt Kommentare und Leerzeichen # $args HASH der Befehlszeilen-Argumente # $hin Handle der Eingabe # $hout Handle der Ausgabe sub clean_css { my ($args, $hin, $hout) = @_; my $line; # Zeile my $cbl = 0; # Kommentarblock my $imgprf = $args -> {"imageprefix"}; # Präfix für relative Bild-Verweise while (defined ($line = <$hin>)) { if ($cbl) { $cbl = 0 if $line =~ /\*\/\s*$/ && $line !~ /\/\*/ ; next; } if ($line =~ /^\s*\/\*/ && $line !~ /\*\//) { $cbl = 1; next; } $line =~ s/\/\*.*?\*\// /g; $line =~ s/^\s+//; $line =~ s/\s+$//; $line =~ s/\s+;/;/g; $line =~ s/\s\s+(?!";)/ /g; $line =~ s/\s\{/\{/g; $line =~ s/\{\s/\{/g; $line =~ s/\s\}/\}/g; $line =~ s/:\s/:/g; $line =~ s/\s:/:/g; if ($imgprf) { $line =~ s/url\((?!http:|\/)([^)]+\.(?:png|jpg|jpeg)\))/"url($imgprf$1"/e; } print $hout "$line\n" if ($line); } } # clean_css # end of file KLEIDER/web/src/sitestyle/clean_css.pl