Beefy Boxes and Bandwidth Generously Provided by pair Networks Cowboy Neal with Hat
The stupid question is the question not asked
 
PerlMonks  

W3 CSS Validator

by OeufMayo (Curate)
on Nov 22, 2001 at 20:25 UTC ( #126985=sourcecode: print w/ replies, xml ) Need Help??

Category: HTML Stuff
Author/Contact Info

Briac Pilpré

Description:

The w3 official CSS validator is a really helpful tool, but unfortunately, it is not possible to have its sources. This script to submit a CSS file to be tested, and returns a summary of the results.

If an error or a warning occured, it will gives all the relevant infos, and if everyting looks fine, it will return a pretty printed version of the CSS. You can also look at the return code of the problem to determine if something went wrong

A small glitch: The HTML parsing doesn't remove newlines, which makes the errors spanning on several lines

#!/usr/bin/perl -w
use strict;
#
# W3C CSS Validator by Philippe Le Hégaret & Sijtsche de Jong
#

use HTTP::Request::Common qw(POST);
use HTML::Parser;
use LWP::UserAgent;
use Getopt::Long;

use vars qw(
        $validator $ua $req $parser $error $VERSION
        $file $warnings $usermedium $profile $help
);

$VERSION = 0.02;

my $inside = 0;
   $error  = 0;   # Script return code. 0: CSS OK, 2: CSS has problems

$file     = undef;
$warnings = 2;
$profile  = 'css2';
$usermedium = 'all';
$help     = undef;

my $results = GetOptions (
        "file=s"      => \$file,
        "warnings=s"  => \$warnings,
        "profile=s"   => \$profile,
        "usermedium=s"=> \$usermedium,
        "help"        => \&usage,
);

$file ||= usage();

$validator = 'http://jigsaw.w3.org/css-validator/validator';

$ua = LWP::UserAgent->new;
$req = POST $validator, Content_Type => 'form-data',
  Content => [
    file => [ $file ],
    warning    => $warnings,
    profile    => $profile,
    usermedium => $usermedium,
];

$parser = HTML::Parser->new(
    report_tags     => [qw(div ul li p)],
    ignore_elements => [qw(h2 h3)],
    start_h         => [ \&start_h, 'tagname, attr' ],
    end_h           => [ sub { $inside-- if shift eq 'div'; }, 'tagnam
+e' ],
    text_h          => [ sub { print shift if $inside > 0 }, 'dtext' ]
);

$parser->parse( $ua->request($req)->content );
print "\n";
exit $error;


sub start_h {
    my ( $tag, $attr ) = @_;
    if ( $tag eq 'div' && $attr->{id}
        && ( $attr->{id} eq 'warnings' || $attr->{id} eq 'errors' ) )
    {
        $error  = 2;
        $inside = -1;
        print "\n*** ", uc( $attr->{id} ), "\n";
    }
    $inside++ if $tag eq 'div';
}

sub usage {
        die <<"DIE";

W3 CSS Validator Wrapper v.$VERSION

usage: $0 -f stylesheet.css [-w 2] [-p css2] [-u all] [-h]

        -f, --file : Filename of the CSS
        -w, --warnings : Warnings level
                2  : All
                1  : Normal report
                0  : Most important
                no : No warnings

        -p, --profile : Stylesheet Profile
                none   : No special profile
                css1   : CSS version 1
                mobile : mobile
                css2   : CSS version 2
                css3   : CSS version 3 (unsupported)
                svg    : SVG
 
        -u, --usermedium : User Medium
                all, aural, braille, embossed, handheld, print, projec
+tion,
                screen, tty, tv, presentation,
                atsc-tv (unsupported)

        -h, --help : Dislay this screen and exits
DIE
}

Comment on W3 CSS Validator
Download Code

Back to Code Catacombs

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: sourcecode [id://126985]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others avoiding work at the Monastery: (11)
As of 2014-04-16 14:10 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    April first is:







    Results (427 votes), past polls