Hallo, Am Wed, 15 Jun 2005, Mario van der Linde schrieb:
Am Mittwoch, 15. Juni 2005 04:06 schrieb David Haller: [...]
Hast du den Pfad zum CSS und bleibt der gleich?
Jep.
Gut. Dann ist die Loesung ueber eine Kommandozeilenoption wohl passend.
Achtung: das script habe ich nur geringfuegig und mit einer Datei / einem CSS getestet...
[Script]
Hui, das muss ich mir jetzt erst mal zu Gemüte führen - das sieht so aus, als würde es mir tatsächlich viel Tipp-Arbeit abnehmen...
*g*
Dafür muss ich das aber erst mal verstehen (reguläre Ausdrücke verursachen bei mir immer ein gewisses Unbehagen, um es vorsichtig zu formulieren).
Die verwendeten auch schon recht "fies", was eben an der sgml/html Syntax liegt, auch wenn fast alle dem gleichen Schema folgen. Generell hilft es, die REs "auseinanderzunehmen", d.h. Stueck fuer Stueck zu betrachten (und man perlre nebendran). Betrachte die erste RE z.B. mal so (und schreibe dir die Erklaerung dahinter): ^ (.*) <(\w+) (\s+[^>]+)? \s+ id= "? ([^"\s]+) "? (.*) $ Die anderen REs sind aehnlich. BTW: ich habe nicht getestet, was passiert, wenn mehrere Elemente auf einer Zeile sind (also z.B. <foo class="bar"><baz class="fubar">). Da muss man evtl. noch etwas basteln. HTML zu parsen ist aber extrem eklig, deswegen nur die einfache Version.
Wenn ich das beim ersten Überfliegen richtig sehe muss ich noch etwas erweitern - Styles von HTML-Elementen die weder über eine id noch über class identifiziert werden, sondern alleine über das Element selbst (z.B. Dokumentweit geltende Listenformatierungen) werden durch das Script nicht berücksichtigt, oder?
Stimmt. Da musst du schauen, mit welcher RE du die faengst und wie das CSS aussieht (d.h. wie die Elemente im Hash %css landen). Wo du ein weiteres "if" platzierst ist relativ egal, mehrfache style="..." attribute werden ja durch if ( /\s+style=/ ) { s/\s+style="([^"]+)"(.*)style="([^"]+)"/ style="$1 $3" $2/g; } zu einem einzigen zusammengesetzt ;) Hm. UNGETESTET(!): if( /^(.*)<(tagname1|foo|bar|tagname4)([\s\/>]+.*)$/ ) { if( $css{$2} ) { $_ = "$1<$2 style=" . $css{$2} . "$3"; } else { print STDERR "Warning: style for tag `$2' not found.\n"; } } HTH, -dnh -- Qual Qual oh Qual wo bist Du oh Qual oh Qual -- B. Brodesser in suse-talk