views:

583

answers:

3

Long ago, I wrote a style 'normalizer' program to scan the ASP/HTML code of a big pile of classic ASP pages (most of which were originally generated from MS-Word documents, so naturally they were littered with superflous stylesheets and massive one-off styles). The style normalizer generated a minimal set of stylesheets and styles and a new 'sanitized' asp/html document, so that the sanitized document produced exactly the same rendered output as the original (verified with screenshot image comparisons).

Every now and then, I run across a need for a program like this, and am toying with the idea of writing one for commercial release.

My googling skills have not turned up anything exactly like this (HTML:Normalize Perl module and HTML Tidy project just seem to clean up tags).

So, my questions are:

  1. is there such a tool already, commercial or otherwise?
  2. if not, does anybody really need it?
  3. if so, what features would make it truly worthwhile?

re #3 for example, collecting a base stylesheet for a set of pages, or adjusting all pages to use a given base stylesheet; preserving classic asp commands, following #includes, preserving asp.net embedded scripts, et al. The more specific and numerous, the better.

Example:
Old html w/embedded tags

<html><head>
<title>title</title>
<style type='css/text'>
.cls1 { font-family: arial; font-size: 10px; font-weight: bold; }
</style>
</head>
<body>
<% somefunction() %>
<div class='cls1' style='font-size:10px;'>test div</div>
</body>
</html>

New html

<html><head>
<title>title</title>
<style type='css/text'>
.cls1 { font-family: arial; font-size: 10px; font-weight: bold; }
</style>
</head>
<body>
<% somefunction() %>
<div class='cls1'>test div</div>
</body>
</html>

Note that the style on the div is gone, since it was redundant with the class cls1

EDIT: removed the term 'sanitizer' since i'm not focused on XSS attacks or filtering input in comments, merely on consolidating a lot of ad-hoc styles and random CSS classes into a minimal coherent set of stylesheets.

+3  A: 

Well, I can't say definitively that this "works" for everything described, but Tidy does a bit more than clean up tags.

See the HTML Tidy Configuration Options, especially those relating to Microsoft Word (like word-2000)

Ken Gentle
Always been a fan of HTML Tidy. I had a bunch of Word-gen'd HTML that had to be cleaned up a few years back, and it was fast and easy.
joseph.ferris
@[Ken G]: HTML Tidy does not seem to clean up style='...' (see example in question) or at least i could not get it to do so...
Steven A. Lowe
You're correct, I don't know of OSS that will do that. XMLSpy (or another of Altova's products) may do it, I believe I've seen other COTS SW that does. CSS merging is an interesting problem. I'd probably attack that specific issue, assuming 'Tidy`-ed input (syntactically correct [X]HTML).
Ken Gentle
@[Ken G]: yes, that's the way i did it before - looks like i'll have to do it again ;-)
Steven A. Lowe
+1  A: 

If you want to know if you've done a reasonable job, you should try these tests (using something like Tidy you'll probably find you haven't done a reasonable job).

Some options:

Anything that uses regular expressions and doesn't parse the markup would be suspect in my mind (and just too complicated to implement).

ianb