first reimport from platal
[platal.git] / bin / devel / xhtml.classes.pl
diff --git a/bin/devel/xhtml.classes.pl b/bin/devel/xhtml.classes.pl
new file mode 100755 (executable)
index 0000000..5e2f642
--- /dev/null
@@ -0,0 +1,139 @@
+#! /usr/bin/perl -w
+#***************************************************************************
+#*  Copyright (C) 2003-2004 Polytechnique.org                              *
+#*  http://opensource.polytechnique.org/                                   *
+#*                                                                         *
+#*  This program is free software; you can redistribute it and/or modify   *
+#*  it under the terms of the GNU General Public License as published by   *
+#*  the Free Software Foundation; either version 2 of the License, or      *
+#*  (at your option) any later version.                                    *
+#*                                                                         *
+#*  This program is distributed in the hope that it will be useful,        *
+#*  but WITHOUT ANY WARRANTY; without even the implied warranty of         *
+#*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the          *
+#*  GNU General Public License for more details.                           *
+#*                                                                         *
+#*  You should have received a copy of the GNU General Public License      *
+#*  along with this program; if not, write to the Free Software            *
+#*  Foundation, Inc.,                                                      *
+#*  59 Temple Place, Suite 330, Boston, MA  02111-1307  USA                *
+#***************************************************************************
+
+
+use strict;
+my %classes;
+my %styles;
+
+my $red="\e[1;37;31m";
+my $yel="\e[1;37;33m";
+my $blu="\e[1;37;34m";
+my $whi="\e[1;37;16m";
+my $gra="\e[0m";
+
+
+sub parse_dir($) {
+    my $dir = shift;
+    my @dirs;
+    opendir DIR,$dir;
+    while(my $a = readdir DIR) {
+        if( -d $dir."/".$a ) {
+            push @dirs,$dir."/".$a unless($a eq '.' or $a eq '..' or $a eq 'CVS');
+        } else {
+            &parse_file($dir."/".$a) if($a =~ /\.(php|tpl|htm[l]?)$/i);
+        }
+    }
+    closedir DIR;
+    foreach $dir (@dirs) { &parse_dir($dir); }
+}
+
+sub parse_file($) {
+    my $file = shift;
+    open FILE,"<$file";
+    my $text = join '',(<FILE>);
+    $text =~ s/[\s\t\n]+/ /g;
+    &get_classes($file,$text);
+    close FILE;
+}
+
+sub get_classes($$) {
+    my $file = shift;
+    my $text = shift;
+    while ($text =~ /<( *[^\/](?:->|[^>])*) *>(.*)$/) {
+        &parse_tag($file,$1);
+        $text = $2;
+    }
+}
+
+sub class_add($$) {
+    my $file = shift;
+    my $tag = shift;
+    my $class = shift;
+    if (defined($classes{"$tag.$class"})) {
+        $classes{"$tag.$class"} .= " $file";
+    } else {
+        $classes{"$tag.$class"} = $file;
+    }
+}
+
+sub parse_tag($$) {
+    my $file = shift;
+    my $tag = shift;
+
+    # tag interdits en xhtml
+    print STDERR "${red}XHTML error: ${yel}<$1> (majuscules) ${blu}($file)${gra}\n"
+        if($tag =~ /^((?:[A-Z]+[a-z]*)+)( |$)/);
+    print STDERR "${red}XHTML error: ${yel}<$1> ${blu}($file)${gra}\n"
+        if($tag =~ /^(b|i|u|big|small|font|center)( |$)/);
+    print STDERR "${red}XHTML error: ${yel}<$1> sans '/' ${blu}($file)${gra}\n"
+        if($tag =~ /^(br|hr|img|link|input)( [^\/]*)?$/);
+
+    print STDERR "${red}XHTML error: ${yel}attribut $1 sans = ${blu}($file)${gra}\n"
+        if($tag =~ / (checked|disabled|multiple|readonly)( |$)/);
+    print STDERR "${red}XHTML error: ${yel}attribut $1 ${blu}($file)${gra}\n"
+        if($tag =~ / (align|width|border|color|valign)=/);
+   
+    # récupération des classes utilisées ...
+    if($tag =~ /^(\w+).* class=('{[^}]*}'|"{[^}]*}"|'[^{}']*'|"[^{}"]*")/) {
+        my $t = lc($1);
+        $2 =~ /^['"](.*)['"]$/;
+        my $c = lc($1);
+        if($c =~ /^{ ?cycle.* values=('[^']*'|"[^"]*")/) {
+            my @cycle = split /['",]/,$1;
+            foreach my $cl (@cycle) {
+                    &class_add($file,$t,$cl) if($cl);
+            }
+        } else {   
+            &class_add($file,$t,$c);
+        }
+    }
+
+    #récupération des styles utilisés ...
+    if($tag =~ /^(\w+).* style=('{[^}]*}'|"{[^}]*}"|'[^{}']*'|"[^{}"]*")/) {
+        my $t = lc($1);
+        $2 =~ /^['"](.*)['"]$/;
+        my $s = lc($1);
+        if (defined($styles{"$t => $s"})) {
+            $styles{"$t => $s"} .= " $file";
+        } else {
+            $styles{"$t => $s"} = $file;
+        }
+    }
+}
+
+foreach my $dir (@ARGV) {
+    &parse_dir($dir);
+}
+
+print "\n$blu..:: Classes ::..$gra\n\n";
+foreach my $key (sort(keys(%classes))) {
+    print $key,"\n";
+}
+
+print "\n$blu..:: Styles ::..$gra\n\n";
+foreach my $key (sort(keys(%styles))) {
+    print $key,"\t",$whi,$styles{$key},$gra,"\n";
+}
+
+print "\n";
+
+# vim:set et ts=4 sts=4 sw=4: