CSS-Dateien komprimieren
Diese Funktion komprimiert eine CSS-Datei. Alle unnötigen Zeichen werden entfernt.
function compressFile($filename, $oneDefinitionPerLine = false) {
$content = file_get_contents($filename);
// Kommentare entfernen
$content = preg_replace('#/\*.*?\*/#si', '', $content);
// Mehrfache Leerzeichen entfernen
$content = preg_replace('# +#i', ' ', $content);
// Zeilenumbrüche/Tabs entfernen
$content = str_replace(array("\t","\n","\r"), '', $content);
// Leerzeichen vor/nach Doppelpunkten entfernen
$content = preg_replace('#\s*:\s*#si', ':', $content);
// Leerzeichen vor/nach { und , entfernen
$content = preg_replace('#\s*(\{|,|\})\s*#si', '\1', $content);
// Leerzeichen nach Zeilenumbrüchen entfernen
$content = str_replace("\n ", "\n", $content);
// Das letzte Semikolon einer Definition ist unnütz
$content = str_replace(';}', '}', $content);
// Einheiten, die ,0 notiert wurden, kürzen ("1.0" -> "1")
$content = preg_replace('~([0-9]+)\.0(em|ex|cm|mm|in|pt|pc)~i', '\1\2', $content);
// Angaben wie 0px auf 0 reduzieren
$content = preg_replace('~0(em|ex|cm|mm|in|pt|pc)~i', '0', $content);
// Doppelte Semikolons entfernen
$content = preg_replace('~;+~i', ';', $content);
// Regeln der Form EIGENSCHAFT:A A A A; zu EIGENSCHAFT:A; und
// EIGENSHAFT:A B A B; zu EIGENSCHAFT:A B; umformen.
$matches = false;
preg_match_all('#(margin|padding|border-width):([0-9a-z]+)\s+([0-9a-z]+)\s+([0-9a-z]+)\s+([0-9a-z]+)\s*;#si', $content, $matches);
if ( $matches ) {
foreach ( $matches[0] as $idx => $matchText ) {
$first = $matches[2][$idx];
$second = $matches[3][$idx];
$third = $matches[4][$idx];
$fourth = $matches[5][$idx];
if ( $first == $second && $second == $third && $third == $fourth ) {
$content = str_replace($matchText, $matches[1][$idx].':'.$first.';', $content);
continue;
}
if ( $first == $third && $second == $fourth ) {
$content = str_replace($matchText, $matches[1][$idx].':'.$first.' '.$second.';', $content);
}
}
}
// Farben der Form #AABBCC zu #ABC umformen
preg_match_all('~#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})~si', $content, $matches);
if ( $matches ) {
foreach ( $matches[0] as $idx => $matchText ) {
$first = $matches[1][$idx];
$second = $matches[2][$idx];
$third = $matches[3][$idx];
if ( $first[0] == $first[1] && $second[0] == $second[1] && $third[0] == $third[1] ) {
$content = str_replace($matchText, '#'.$first[0].$second[0].$third[0], $content);
}
}
}
// Auf Wunsch jede Gruppe in eine einzelne Zeile schreiben (Debugging)
if ( $oneDefinitionPerLine ) {
$content = str_replace('}', "}\n", $content);
}
return $content;
}
Snippetdetails
- hinzugefügt: 05.12.2008
- aktualisiert: 05.12.2008
- Snippet herunterladen
Kommentar verfassen
Fehler gefunden? Doofer Code? Ein kleines "Danke!"? Hinterlasse einfach einen Kommentar.
Dein Kommentar wird erst nach einer manuellen Prüfung angezeigt.