From jmp@havoc.student.umd.edu  Tue Sep 23 00:57:50 1997
Received: from havoc.student.umd.edu (havoc.student.umd.edu [129.2.156.140])
          by hub.freebsd.org (8.8.7/8.8.7) with ESMTP id AAA27458
          for <FreeBSD-gnats-submit@freebsd.org>; Tue, 23 Sep 1997 00:57:47 -0700 (PDT)
Received: (from root@localhost)
	by havoc.student.umd.edu (8.8.5/8.8.5) id DAA28750;
	Tue, 23 Sep 1997 03:57:26 -0400 (EDT)
Message-Id: <199709230757.DAA28750@havoc.student.umd.edu>
Date: Tue, 23 Sep 1997 03:57:26 -0400 (EDT)
From: John Peterson <jmp@havoc.student.umd.edu>
Reply-To: jmp@havoc.student.umd.edu
To: FreeBSD-gnats-submit@freebsd.org
Subject: Upgade of weblint v1.017 to 1.020 
X-Send-Pr-Version: 3.2

>Number:         4611
>Category:       ports
>Synopsis:       Upgade of weblint v1.017 to 1.020
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-ports
>State:          closed
>Quarter:
>Keywords:
>Date-Required:
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Tue Sep 23 01:00:01 PDT 1997
>Closed-Date:    Wed Oct 29 09:10:50 PST 1997
>Last-Modified:  Wed Oct 29 09:15:17 PST 1997
>Originator:     John Peterson
>Release:        FreeBSD 2.2.2-RELEASE i386
>Organization:
HavoCom
>Environment:
>Description:
   weblint (/ports/www/weblint) has a newer version than the one in the
source tree. I followed the directions on how to upgrade the port as best
I could. The resulting diff of the directories of the old version (1.017)
and the new version (1.020) are included at the end of the file. In the 
directory I created for the new port I did not have the CVS directorys and
or files. If there are any problems, please let me know.


diff -ruN /usr/ports/www/weblint/CVS/Entries /root/myports/www/weblint/CVS/Entries
--- /usr/ports/www/weblint/CVS/Entries	Mon May 19 07:52:33 1997
+++ /root/myports/www/weblint/CVS/Entries	Wed Dec 31 19:00:00 1969
@@ -1 +0,0 @@
-/Makefile/1.7/Mon Nov 18 14:15:49 1996//
diff -ruN /usr/ports/www/weblint/CVS/Repository /root/myports/www/weblint/CVS/Repository
--- /usr/ports/www/weblint/CVS/Repository	Mon May 19 07:52:33 1997
+++ /root/myports/www/weblint/CVS/Repository	Wed Dec 31 19:00:00 1969
@@ -1 +0,0 @@
-/home/ncvs/ports/www/weblint
diff -ruN /usr/ports/www/weblint/CVS/Root /root/myports/www/weblint/CVS/Root
--- /usr/ports/www/weblint/CVS/Root	Mon May 19 07:52:33 1997
+++ /root/myports/www/weblint/CVS/Root	Wed Dec 31 19:00:00 1969
@@ -1 +0,0 @@
-/home/ncvs
diff -ruN /usr/ports/www/weblint/Makefile /root/myports/www/weblint/Makefile
--- /usr/ports/www/weblint/Makefile	Mon Nov 18 09:15:49 1996
+++ /root/myports/www/weblint/Makefile	Tue Sep 23 03:13:24 1997
@@ -1,16 +1,16 @@
 # New ports collection makefile for:	weblint
-# Version required:	1.017
-# Date created:		Oct 14, 1995
-# Whom:			pst
+# Version required:	1.020
+# Date created:		Sep 23, 1997
+# Whom:			jmp
 #
-# $Id: Makefile,v 1.7 1996/11/18 14:15:49 asami Exp $
+# $Id$
 #
 
-DISTNAME=	weblint-1.017
+DISTNAME=	weblint-1.020
 CATEGORIES=	www
-MASTER_SITES=	ftp://ftp.khoral.com/pub/weblint/
+MASTER_SITES=	ftp://ftp.cre.canon.co.uk/pub/weblint/
 
-MAINTAINER=	pst@FreeBSD.ORG
+MAINTAINER=	jmp@cfar.umd.edu
 
 MAN1=		weblint.1
 
diff -ruN /usr/ports/www/weblint/README.html /root/myports/www/weblint/README.html
--- /usr/ports/www/weblint/README.html	Mon May 19 08:08:22 1997
+++ /root/myports/www/weblint/README.html	Wed Dec 31 19:00:00 1969
@@ -1,30 +0,0 @@
-<html>
-<title> The FreeBSD Ports Collection (www/weblint)</title>
-<head><h1> The FreeBSD Ports Collection ("www/weblint")</h1> </head> <hr>
-<body>
-
-<p>You are now in the directory for the port "www/weblint" (package name "weblint-1.017").
-
-<p>This is the one-line description for this port:
-
-<p><hr><p>
-HTML validator and sanity checker
-<p><hr>
-
-<p>Please read the file "<a href="pkg/DESCR">pkg/DESCR</a>" for a
-longer description.
-
-<p>Go to the <a href="../../README.html">top of the ports tree</a> for
-a summary on how to use the ports collection.
-
-<p>
-
-<p>
-
-
-<p><hr><p>
-<a href="../README.html"> Go up one level</a>
-|
-<a href="../../README.html"> Go to top of ports tree</a>
-</body>
-</html>
diff -ruN /usr/ports/www/weblint/files/CVS/Entries /root/myports/www/weblint/files/CVS/Entries
--- /usr/ports/www/weblint/files/CVS/Entries	Mon May 19 07:52:34 1997
+++ /root/myports/www/weblint/files/CVS/Entries	Wed Dec 31 19:00:00 1969
@@ -1 +0,0 @@
-/md5/1.2/Sat Jul 20 22:30:37 1996//
diff -ruN /usr/ports/www/weblint/files/CVS/Repository /root/myports/www/weblint/files/CVS/Repository
--- /usr/ports/www/weblint/files/CVS/Repository	Mon May 19 07:52:33 1997
+++ /root/myports/www/weblint/files/CVS/Repository	Wed Dec 31 19:00:00 1969
@@ -1 +0,0 @@
-/home/ncvs/ports/www/weblint/files
diff -ruN /usr/ports/www/weblint/files/CVS/Root /root/myports/www/weblint/files/CVS/Root
--- /usr/ports/www/weblint/files/CVS/Root	Mon May 19 07:52:33 1997
+++ /root/myports/www/weblint/files/CVS/Root	Wed Dec 31 19:00:00 1969
@@ -1 +0,0 @@
-/home/ncvs
diff -ruN /usr/ports/www/weblint/files/md5 /root/myports/www/weblint/files/md5
--- /usr/ports/www/weblint/files/md5	Sat Jul 20 18:30:37 1996
+++ /root/myports/www/weblint/files/md5	Tue Sep 23 03:13:43 1997
@@ -1 +1 @@
-MD5 (weblint-1.017.tar.gz) = 8b7d41caa18c09e79846d99dc6175545
+MD5 (weblint-1.020.tar.gz) = 032d12e353397e7675b1a739b0e7bc0a
diff -ruN /usr/ports/www/weblint/patches/CVS/Entries /root/myports/www/weblint/patches/CVS/Entries
--- /usr/ports/www/weblint/patches/CVS/Entries	Mon May 19 07:52:34 1997
+++ /root/myports/www/weblint/patches/CVS/Entries	Wed Dec 31 19:00:00 1969
@@ -1 +0,0 @@
-/patch-aa/1.2/Sat Jul 20 22:30:38 1996//
diff -ruN /usr/ports/www/weblint/patches/CVS/Repository /root/myports/www/weblint/patches/CVS/Repository
--- /usr/ports/www/weblint/patches/CVS/Repository	Mon May 19 07:52:34 1997
+++ /root/myports/www/weblint/patches/CVS/Repository	Wed Dec 31 19:00:00 1969
@@ -1 +0,0 @@
-/home/ncvs/ports/www/weblint/patches
diff -ruN /usr/ports/www/weblint/patches/CVS/Root /root/myports/www/weblint/patches/CVS/Root
--- /usr/ports/www/weblint/patches/CVS/Root	Mon May 19 07:52:34 1997
+++ /root/myports/www/weblint/patches/CVS/Root	Wed Dec 31 19:00:00 1969
@@ -1 +0,0 @@
-/home/ncvs
diff -ruN /usr/ports/www/weblint/patches/patch-aa /root/myports/www/weblint/patches/patch-aa
--- /usr/ports/www/weblint/patches/patch-aa	Sat Jul 20 18:30:38 1996
+++ /root/myports/www/weblint/patches/patch-aa	Tue Sep 23 03:08:28 1997
@@ -1,9 +1,9 @@
-*** Makefile	Fri Jul 28 01:08:16 1995
---- Makefile	Sat Oct 14 16:07:49 1995
+*** Makefile	Fri Aug 16 04:10:00 1995
+--- Makefile	Fri Oct 13 00:00:00 2000
 ***************
 *** 3,10 ****
   #
-  VERSION	= 1.017
+  VERSION	= 1.020
   
 ! BINDIR	= /usr/local/bin
 ! MANDIR	= /usr/local/man/man1
@@ -12,7 +12,7 @@
   RM	= /bin/rm -f
 --- 3,12 ----
   #
-  VERSION	= 1.017
+  VERSION	= 1.020
   
 ! PREFIX ?= /usr/local
 ! BINDIR	= ${PREFIX}/bin
Binary files /usr/ports/www/weblint/weblint-1.020.tgz and /root/myports/www/weblint/weblint-1.020.tgz differ
diff -ruN /usr/ports/www/weblint/work/weblint-1.020/Announce /root/myports/www/weblint/work/weblint-1.020/Announce
--- /usr/ports/www/weblint/work/weblint-1.020/Announce	Wed Dec 31 19:00:00 1969
+++ /root/myports/www/weblint/work/weblint-1.020/Announce	Wed Sep 10 03:12:31 1997
@@ -0,0 +1,22 @@
+
+Weblint 1.020 is now available:
+
+        http://www.cre.canon.co.uk/~neilb/weblint/
+        ftp://ftp.cre.canon.co.uk/pub/weblint/weblint-1.020.tar.gz
+        ftp://ftp.cre.canon.co.uk/pub/weblint/weblint-1.020.zip
+
+Weblint is a syntax and minimal style checker for HTML: a Perl script which
+picks fluff off HTML pages, much in the same way traditional lint picks fluff
+off C programs.
+
+There were a couple of small bugs reported with 1.019, fixed in this release.
+
+neilb
+
+    *	Weblint was incorrectly warning that OPTION is not a container element
+
+    *	The -U switch was no longer displayed the help screen.
+	The help screen was referred to the old "Java" extension.
+
+    *	Performance improvement when recursively checking files in a directory
+
diff -ruN /usr/ports/www/weblint/work/weblint-1.020/Artistic /root/myports/www/weblint/work/weblint-1.020/Artistic
--- /usr/ports/www/weblint/work/weblint-1.020/Artistic	Wed Dec 31 19:00:00 1969
+++ /root/myports/www/weblint/work/weblint-1.020/Artistic	Tue Oct 18 22:27:26 1994
@@ -0,0 +1,129 @@
+
+			 The "Artistic License"
+
+				Preamble
+
+The intent of this document is to state the conditions under which a
+Package may be copied, such that the Copyright Holder maintains some
+semblance of artistic control over the development of the package,
+while giving the users of the package the right to use and distribute
+the Package in a more-or-less customary fashion, plus the right to make
+reasonable modifications.
+
+Definitions:
+
+	"Package" refers to the collection of files distributed by the
+	Copyright Holder, and derivatives of that collection of files
+	created through textual modification.
+
+	"Standard Version" refers to such a Package if it has not been
+	modified, or has been modified in accordance with the wishes
+	of the Copyright Holder as specified below.
+
+	"Copyright Holder" is whoever is named in the copyright or
+	copyrights for the package.
+
+	"You" is you, if you're thinking about copying or distributing
+	this Package.
+
+	"Reasonable copying fee" is whatever you can justify on the
+	basis of media cost, duplication charges, time of people involved,
+	and so on.  (You will not be required to justify it to the
+	Copyright Holder, but only to the computing community at large
+	as a market that must bear the fee.)
+
+	"Freely Available" means that no fee is charged for the item
+	itself, though there may be fees involved in handling the item.
+	It also means that recipients of the item may redistribute it
+	under the same conditions they received it.
+
+1. You may make and give away verbatim copies of the source form of the
+Standard Version of this Package without restriction, provided that you
+duplicate all of the original copyright notices and associated disclaimers.
+
+2. You may apply bug fixes, portability fixes and other modifications
+derived from the Public Domain or from the Copyright Holder.  A Package
+modified in such a way shall still be considered the Standard Version.
+
+3. You may otherwise modify your copy of this Package in any way, provided
+that you insert a prominent notice in each changed file stating how and
+when you changed that file, and provided that you do at least ONE of the
+following:
+
+    a) place your modifications in the Public Domain or otherwise make them
+    Freely Available, such as by posting said modifications to Usenet or
+    an equivalent medium, or placing the modifications on a major archive
+    site such as uunet.uu.net, or by allowing the Copyright Holder to include
+    your modifications in the Standard Version of the Package.
+
+    b) use the modified Package only within your corporation or organization.
+
+    c) rename any non-standard executables so the names do not conflict
+    with standard executables, which must also be provided, and provide
+    a separate manual page for each non-standard executable that clearly
+    documents how it differs from the Standard Version.
+
+    d) make other distribution arrangements with the Copyright Holder.
+
+4. You may distribute the programs of this Package in object code or
+executable form, provided that you do at least ONE of the following:
+
+    a) distribute a Standard Version of the executables and library files,
+    together with instructions (in the manual page or equivalent) on where
+    to get the Standard Version.
+
+    b) accompany the distribution with the machine-readable source of
+    the Package with your modifications.
+
+    c) give non-standard executables non-standard names, and clearly
+    document the differences in manual pages (or equivalent), together
+    with instructions on where to get the Standard Version.
+
+    d) make other distribution arrangements with the Copyright Holder.
+
+5. You may charge a reasonable copying fee for any distribution of this
+Package.  You may charge any fee you choose for support of this
+Package.  You may not charge a fee for this Package itself.  However,
+you may distribute this Package in aggregate with other (possibly
+commercial) programs as part of a larger (possibly commercial) software
+distribution provided that you do not advertise this Package as a
+product of your own.  You may embed this Package's interpreter within
+an executable of yours (by linking); this shall be construed as a mere
+form of aggregation, provided that the complete Standard Version of the
+interpreter is so embedded.
+
+6. The scripts and library files supplied as input to or produced as
+output from the programs of this Package do not automatically fall
+under the copyright of this Package, but belong to whomever generated
+them, and may be sold commercially, and may be aggregated with this
+Package.  If such scripts or library files are aggregated with this
+Package via the so-called "undump" or "unexec" methods of producing a
+binary executable image, then distribution of such an image shall
+neither be construed as a distribution of this Package nor shall it
+fall under the restrictions of Paragraphs 3 and 4, provided that you do
+not represent such an executable image as a Standard Version of this
+Package.
+
+7. C subroutines (or comparably compiled subroutines in other
+languages) supplied by you and linked into this Package in order to
+emulate subroutines and variables of the language defined by this
+Package shall not be considered part of this Package, but are the
+equivalent of input as in Paragraph 6, provided these subroutines do
+not change the language in any way that would cause it to fail the
+regression tests for the language.
+
+8. Aggregation of this Package with a commercial distribution is always
+permitted provided that the use of this Package is embedded; that is,
+when no overt attempt is made to make this Package's interfaces visible
+to the end user of the commercial distribution.  Such use shall not be
+construed as a distribution of this Package.
+
+9. The name of the Copyright Holder may not be used to endorse or promote
+products derived from this software without specific prior written permission.
+
+10. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+				The End
+
diff -ruN /usr/ports/www/weblint/work/weblint-1.020/ChangeLog /root/myports/www/weblint/work/weblint-1.020/ChangeLog
--- /usr/ports/www/weblint/work/weblint-1.020/ChangeLog	Wed Dec 31 19:00:00 1969
+++ /root/myports/www/weblint/work/weblint-1.020/ChangeLog	Thu Sep  4 05:26:43 1997
@@ -0,0 +1,21 @@
+
+			ChangeLog for Weblint 1.020
+
+	Changes in all past releases can be found on the weblint home page:
+		http://www.cre.canon.co.uk/~neilb/weblint/
+
+1.020
+
+    *	Weblint would warn that OPTION is not a container element,
+	when it is. You now get a warning if an OPTION is empty.
+	Reported by Richard L. Hawes <rhawes@dmapub.dma.org>
+
+    *	The -U switch was no longer displayed the help screen.
+	The help screen was referred to the old "Java" extension.
+	Reported by Lars Balker Rasmussen <lbr@mjolner.dk>
+
+    *	Added /o to a pattern match in the wanted() subroutine. wanted()
+	is called many times when doing recursive checks in directories;
+	this will have a performance improvement.
+	Suggested by: Jason Mathews <mathews@nssdc.gsfc.nasa.gov>
+
diff -ruN /usr/ports/www/weblint/work/weblint-1.020/Makefile /root/myports/www/weblint/work/weblint-1.020/Makefile
--- /usr/ports/www/weblint/work/weblint-1.020/Makefile	Wed Dec 31 19:00:00 1969
+++ /root/myports/www/weblint/work/weblint-1.020/Makefile	Tue Sep 23 03:14:04 1997
@@ -0,0 +1,57 @@
+#
+# Makefile for weblint
+#
+VERSION	= 1.020
+
+SHELL	= /bin/sh
+
+PREFIX ?= /usr/local
+BINDIR	= ${PREFIX}/bin
+MANDIR	= ${PREFIX}/man/man1
+LIBDIR  = ${PREFIX}/lib
+PSROFF	= groff -Tps
+PSVIEW	= ghostview
+RM	= /bin/rm -f
+
+PROGRAM	= weblint
+PSFILE	= $(PROGRAM).ps
+TARFILE	= $(PROGRAM)-$(VERSION).tar
+TGZ	= $(TARFILE).gz
+
+all: $(PROGRAM)
+
+install: $(PROGRAM)
+	install -c -m 755 -o bin -g bin $(PROGRAM)   $(BINDIR)
+	install -c -m 644 -o bin -g bin $(PROGRAM).1 $(MANDIR)
+	install -c -m 644 -o bin -g bin weblintrc    $(LIBDIR)
+
+test:
+	@./test.pl
+
+$(PSFILE): $(PROGRAM).1
+	$(PSROFF) -man $(PROGRAM).1 > $(PSFILE)
+
+
+preview: $(PSFILE)
+	$(PSVIEW) $(PSFILE) &
+
+tar: clean $(PROGRAM)
+	(						\
+	  cd .. ;					\
+	  tar cvf $(TARFILE) $(PROGRAM)-$(VERSION) ;	\
+	  gzip $(TARFILE) ;				\
+	  mv $(TGZ) $(PROGRAM)-$(VERSION)		\
+	)
+
+zip: clean $(PROGRAM)
+	(						\
+	  cd .. ;					\
+	  mv $(PROGRAM)-$(VERSION) $(PROGRAM) ;		\
+	  zip -r $(PROGRAM) $(PROGRAM) ;		\
+	  mv $(PROGRAM) $(PROGRAM)-$(VERSION) ;		\
+	  mv $(PROGRAM).zip $(PROGRAM)-$(VERSION)	\
+	)
+
+clean:
+	$(RM) *~ $(PSFILE) $(TARFILE) $(TGZ) test.log $(PROGRAM).zip
+
diff -ruN /usr/ports/www/weblint/work/weblint-1.020/Makefile.orig /root/myports/www/weblint/work/weblint-1.020/Makefile.orig
--- /usr/ports/www/weblint/work/weblint-1.020/Makefile.orig	Wed Dec 31 19:00:00 1969
+++ /root/myports/www/weblint/work/weblint-1.020/Makefile.orig	Sat Aug 16 04:10:21 1997
@@ -0,0 +1,56 @@
+#
+# Makefile for weblint
+#
+VERSION	= 1.020
+
+SHELL	= /bin/sh
+
+BINDIR	= /usr/local/bin
+MANDIR	= /usr/local/man/man1
+PSROFF	= groff -Tps
+PSVIEW	= ghostview
+RM	= /bin/rm -f
+
+PROGRAM	= weblint
+PSFILE	= $(PROGRAM).ps
+TARFILE	= $(PROGRAM)-$(VERSION).tar
+TGZ	= $(TARFILE).gz
+
+all: $(PROGRAM) $(PSFILE)
+
+install: $(PROGRAM)
+	-cp $(PROGRAM) $(BINDIR)
+	-chmod 755 $(BINDIR)/$(PROGRAM)
+	-cp $(PROGRAM).1 $(MANDIR)
+	-chmod 644 $(MANDIR)/$(PROGRAM).1
+
+test:
+	@./test.pl
+
+$(PSFILE): $(PROGRAM).1
+	$(PSROFF) -man $(PROGRAM).1 > $(PSFILE)
+
+
+preview: $(PSFILE)
+	$(PSVIEW) $(PSFILE) &
+
+tar: clean $(PROGRAM)
+	(						\
+	  cd .. ;					\
+	  tar cvf $(TARFILE) $(PROGRAM)-$(VERSION) ;	\
+	  gzip $(TARFILE) ;				\
+	  mv $(TGZ) $(PROGRAM)-$(VERSION)		\
+	)
+
+zip: clean $(PROGRAM)
+	(						\
+	  cd .. ;					\
+	  mv $(PROGRAM)-$(VERSION) $(PROGRAM) ;		\
+	  zip -r $(PROGRAM) $(PROGRAM) ;		\
+	  mv $(PROGRAM) $(PROGRAM)-$(VERSION) ;		\
+	  mv $(PROGRAM).zip $(PROGRAM)-$(VERSION)	\
+	)
+
+clean:
+	$(RM) *~ $(PSFILE) $(TARFILE) $(TGZ) test.log $(PROGRAM).zip
+
diff -ruN /usr/ports/www/weblint/work/weblint-1.020/README /root/myports/www/weblint/work/weblint-1.020/README
--- /usr/ports/www/weblint/work/weblint-1.020/README	Wed Dec 31 19:00:00 1969
+++ /root/myports/www/weblint/work/weblint-1.020/README	Sat Aug 16 04:24:03 1997
@@ -0,0 +1,105 @@
+
+			  Weblint, Version 1.020
+
+    Copyright (c) 1994, 1995, 1996, 1997 Neil Bowers.  All rights reserved.
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the "Artistic License".  You should have received
+    a copy of the Artistic License with this distribution, in the file named
+    "Artistic".  If not, I'll be glad to provide one.
+
+--------------------------------------------------------------------------
+
+Weblint is a syntax and minimal style checker for HTML: a perl script which
+picks fluff off html pages, much in the same way traditional lint picks fluff
+off C programs.  Files to be checked are passed on the command-line:
+
+    % weblint *.html
+
+Warnings are generated a la lint -- <filename>(line #): <warning>. E.g.:
+
+    home.html(9): malformed heading - open tag is <H1>, but closing is </H2>
+
+Weblint includes the following features:
+
+    *	by default checks for HTML 3.2 (Wilbur)
+    *	46 different checks and warnings
+    *	Warnings can be enabled/disabled individually, as per your preference
+    *	basic structure and syntax checks
+    *	warnings for use of unknown elements and element attributes.
+    *	context checks (where a tag must appear within a certain element).
+    *	overlapped or illegally nested elements.
+    *	do IMG elements have ALT text?
+    *	catches elements which should only appear once
+    *	flags obsolete elements.
+    *	support for user and site configuration files
+    *	stylistic checks
+    *	checks for html which is not portable across all browsers
+    *	flags markup embedded in comments, since this can confuse some browsers
+    *	support for Netscape (v4), and Microsoft (v4) HTML extensions
+
+All warnings can be enabled or disabled, using a configuration file,
+$HOME/.weblintrc.  A sample configuration file, weblintrc, is included
+in the distribution.  Weblint also supports a site-wide configuration
+file, which lets a group of people share a common configuration.
+See the man page for details.
+
+--------------------------------------------------------------------------
+
+Installation
+
+NOTE:	Certain versions of perl have bugs which are triggered by weblint.
+	You shouldn't experience problems if you have 4.036, or 5.004.
+
+A simple Makefile is provided, in which you may want to modify BINDIR
+and MANDIR, which specify where the weblint script and manpage should
+be installed.
+
+Weblint uses the `newgetopt.pl' and `find.pl' libraries, which are part
+of the standard perl library, so this will hopefully not cause any problems.
+Please let me know if it does.
+
+The manpage (weblint.1) should be installed in a directory where it
+will be picked up by man (e.g., /usr/local/man/man1 on our machines).
+A postscript version of the manpage (weblint.ps) is available at:
+	ftp://ftp.cre.canon.co.uk/pub/weblint/weblint.ps
+
+Weblint is available via anonymous ftp, either as a gzip'd tar file,
+or zip'd archive:
+	ftp://ftp.cre.canon.co.uk/pub/weblint/weblint-1.020.tar.gz
+	ftp://ftp.cre.canon.co.uk/pub/weblint/weblint-1.020.zip
+or you can get it from the weblint home page:
+	http://www.cre.canon.co.uk/~neilb/weblint/
+The home page also includes a list of other ftp sites where you
+can get weblint.
+
+The weblint distribution includes a simple regression testsuite.
+Run the testsuite with either of the following commands:
+
+	% make test
+	% ./test.pl
+
+If any of the tests fail, please mail the logfile (test.log) to me.
+
+--------------------------------------------------------------------------
+
+I hope you find this useful.  Comments, suggestions and bug reports are
+welcome, see my email address or home page, given below.  Sample html
+helps when tracking down problems.
+
+I maintain two email lists:
+
+	weblint-announce@cre.canon.co.uk
+		Announcements for new versions of weblint.
+
+	weblint-victims@cre.canon.co.uk
+		Discussion related to weblint (such as what features should
+		be added), as well as announcements for new versions of
+		weblint, and pre-release testing.
+
+Email me if you want to be added to either list. You don't need to be
+on both lists.
+
+Neil Bowers
+Canon Research Centre Europe
+<neilb@cre.canon.co.uk>    http://www.cre.canon.co.uk/~neilb/
diff -ruN /usr/ports/www/weblint/work/weblint-1.020/rc.new /root/myports/www/weblint/work/weblint-1.020/rc.new
--- /usr/ports/www/weblint/work/weblint-1.020/rc.new	Wed Dec 31 19:00:00 1969
+++ /root/myports/www/weblint/work/weblint-1.020/rc.new	Sat Aug 16 04:24:09 1997
@@ -0,0 +1,5 @@
+# ========================================================================
+# New stuff in the 1.020 release
+# ========================================================================
+
+#-- no new warnings or variables added in 1.020
diff -ruN /usr/ports/www/weblint/work/weblint-1.020/test.pl /root/myports/www/weblint/work/weblint-1.020/test.pl
--- /usr/ports/www/weblint/work/weblint-1.020/test.pl	Wed Dec 31 19:00:00 1969
+++ /root/myports/www/weblint/work/weblint-1.020/test.pl	Wed Sep 10 03:40:20 1997
@@ -0,0 +1,2074 @@
+: # use perl
+        eval 'exec perl -S $0 "$@"'
+                if $runnning_under_some_shell;
+
+#
+# test.pl - regression tests for weblint
+#
+# Copyright (C) 1995,1996,1997 Neil Bowers.  All rights reserved.
+#
+# See README for additional blurb.
+# Bugs, comments, suggestions welcome: neilb@cre.canon.co.uk
+#
+$VERSION	= '1.012';
+($PROGRAM = $0) =~ s@.*/@@;
+$FILENAME	= 'testfile.htm';
+$LOGFILE	= 'test.log';
+$ENV{WEBLINTRC} = '/dev/null';
+@TMPDIR_OPTIONS	= ('/usr/tmp', '/tmp', '/var/tmp', '/temp');
+@COLOR_NAMES    = ('aqua', 'black', 'blue', 'fuchsia', 'gray', 'green',
+                   'lime', 'maroon', 'navy',
+                   'olive', 'purple', 'red', 'silver', 'teal',
+                   'white', 'yellow');
+
+
+&WeblintTestInitialize();
+$state = 'start';
+while (<DATA>)
+{
+    chop;
+
+    #--------------------------------------------------------------------
+    # A line of dashes (minus characters) signify end of test
+    #--------------------------------------------------------------------
+    if (/^\#----/)
+    {
+        push(@args, '') if @args == 0;
+        foreach $arg (@args)
+        {
+            if (@warns > 0)
+            {
+                &ExpectWARN($subject, $arg, $body, @warns);
+            }
+            else
+            {
+                &ExpectOK($subject, $arg, $body);
+            }
+        }
+
+        $subject = undef;
+        $body    = '';
+        @args    = ();
+        @warns   = ();
+
+        $state   = 'start';
+
+        next;
+    }
+
+    #--------------------------------------------------------------------
+    # A line starting with 3 (FOUR) hashes (#) delimits the HTML test
+    #--------------------------------------------------------------------
+    if (/^\#\#\#\#/)
+    {
+        $state = ($state eq 'start' || $state eq 'args') ? 'body' : 'end';
+
+        next;
+    }
+
+    #--------------------------------------------------------------------
+    # In START state, we are about to read the subject line of the test
+    #--------------------------------------------------------------------
+    if ($state eq 'start')
+    {
+        $subject = $_;
+        $state   = 'args';
+        next;
+    }
+
+    if ($state eq 'args')
+    {
+        $_ = '' if /^\s*<none>\s*$/io;
+        push(@args, $_);
+        next;
+    }
+
+    if ($state eq 'body')
+    {
+        $body .= "$_\n";
+        next;
+    }
+
+    if ($state eq 'end')
+    {
+        next if /^\s*$/;
+        ($line, $id) = split(/:/, $_, 2);
+        push(@warns, $line, $id);
+        next;
+    }
+}
+
+foreach $color (@COLOR_NAMES)
+{
+    &ExpectOK("BODY with BGCOLOR attribute set to \"$color\"", '',
+              "<HTML>\n<HEAD><TITLE>test</TITLE></HEAD>\n".
+              "<BODY BGCOLOR=\"$color\">this is the body</BODY>\n</HTML>");
+}
+
+&WeblintTestEnd();
+
+
+#========================================================================
+# Function:	ExpectOK
+# Purpose:	Run a test, for which we expect no warnings.
+#========================================================================
+sub ExpectOK
+{
+   local($description, $flags, $html) = @_;
+   local(@results);
+
+
+   &NextTest($description);
+   &CreateFile($html) || die "Failed to create working file ($filename): $!\n";
+   @results = &RunWeblint($flags);
+   if (@results == 0)
+   {
+      &TestPasses();
+   }
+   else
+   {
+      &TestFails($html, @results);
+   }
+}
+
+
+#========================================================================
+# Function:	ExpectWARN
+# Purpose:	A test which we expect weblint to complain about.
+#		We pass in one or more expected errors.
+#========================================================================
+sub ExpectWARN
+{
+   local($description, $flags, $html, @expected) = @_;
+   local(@results, @notSeen);
+   local($i, $j);
+
+
+   &NextTest($description);
+   &CreateFile($html) || die "Failed to create working file ($filename): $!\n";
+   @results = &RunWeblint($flags);
+
+   if (@results == 0)
+   {
+      &TestFails($html);
+      return;
+   }
+
+   OUTER: for ($i=0; $i < $#expected; $i += 2)
+   {
+      INNER: for ($j = 0; $j < $#results; $j += 2)
+      {
+	 if ($results[$j] == $expected[$i] &&
+	     $results[$j+1] eq $expected[$i+1])
+	 {
+	    @lost = splice(@results, $j, 2);
+	    next OUTER;
+	 }
+      }
+      @notSeen = (@notSeen, $expected[$i], $expected[$i+1]);
+   }
+
+   if (@notSeen == 0 && @results == 0)
+   {
+      &TestPasses();
+   }
+   else
+   {
+      &TestFails($html, @results);
+   }
+}
+
+
+#========================================================================
+# Function:	RunWeblint
+# Purpose:	This function runs weblint and parses the output.
+#		The results from weblint are passed back in an array.
+#========================================================================
+sub RunWeblint
+{
+   local($flags) = @_;
+   local(*OUTPUT);
+   local(@results);
+
+
+   open(OUTPUT, "./weblint -noglobals -t $flags $filename |") || do
+   {
+      die "Failed to create pipe from weblint: $!\n";
+   };
+   while (<OUTPUT>)
+   {
+      next if /^$/;
+      chop;
+      ($repfile, $line, $wid) = split(/:/);
+      push(@results, $line, $wid);
+   }
+   close OUTPUT;
+   $status = ($? >> 8);
+
+   return @results;
+}
+
+
+#========================================================================
+# Function:	CreateFile
+# Purpose:	Create sample html file from text string.
+#========================================================================
+sub CreateFile
+{
+   local($html) = @_;
+   local(*FILE);
+
+
+   open(FILE, "> $filename") || return undef;
+   print FILE $html."\n";
+   close FILE;
+
+   1;
+}
+
+#========================================================================
+# Function:	WeblintTestInitialize()
+# Purpose:	Initialize global variables and open log file.
+#========================================================================
+sub WeblintTestInitialize
+{
+   $TMPDIR   = &PickTmpdir(@TMPDIR_OPTIONS);
+   $WORKDIR  = "$TMPDIR/webtest.$$";
+   mkdir($WORKDIR, 0755) || do
+   {
+      die "Failed to create working directory $WORKDIR: $!\n";
+   };
+
+   $filename = $WORKDIR.'/'.$FILENAME;
+   $testID   = 0;
+   $failCount = 0;
+   $passCount = 0;
+
+   $WEBLINTVERSION = &DetermineWeblintVersion() || 'could not determine';
+
+   open(LOGFILE, "> $LOGFILE") || die "Can't write logfile $LOGFILE: $!\n";
+
+   print LOGFILE "Weblint Testsuite:\n";
+   print LOGFILE "    Weblint Version:   $WEBLINTVERSION\n";
+   print LOGFILE "    Testsuite Version: $VERSION\n";
+   print LOGFILE '=' x 76, "\n";
+
+   print STDERR "Running weblint testsuite:\n";
+   print STDERR "    Weblint Version:   $WEBLINTVERSION\n";
+   print STDERR "    Testsuite Version: $VERSION\n";
+   print STDERR "    Results Logfile:   $LOGFILE\n";
+   print STDERR "Running test cases (. for pass, ! for failure):\n";
+}
+
+#========================================================================
+# Function:	DetermineWeblintVersion
+# Purpose:	Work out which version of weblint we think we're testing.
+#		Hi Adam!
+#========================================================================
+sub DetermineWeblintVersion
+{
+   local(*PIPE);
+   local($VERSION);
+
+   open(PIPE, "./weblint -v 2>&1 |") || return undef;
+
+   while (<PIPE>)
+   {
+      return $1 if /^(weblint\s+v.*)$/;
+
+      /^\s*This is weblint, version\s*([0-9.]+)/ && do
+      {
+	 return "weblint v$1";
+      };
+   }
+}
+
+#========================================================================
+# Function:	WeblintTestEnd()
+# Purpose:	Generate summary in logfile, close logfile, then
+#		clean up working files and directory.
+#========================================================================
+sub WeblintTestEnd
+{
+   print LOGFILE '=' x 76, "\n";
+   print LOGFILE "Number of Passes:   $passCount\n";
+   print LOGFILE "Number of Failures: $failCount\n";
+   close LOGFILE;
+
+   print STDERR "\n", '-' x 76, "\n";
+   if ($failCount > 0)
+   {
+      print STDERR "Failed tests:\n";
+      foreach $failure (@failedTests)
+      {
+	 print STDERR "    $failure\n";
+      }
+      print STDERR '-' x 76, "\n";
+      
+   }
+   print STDERR "Number of Passes:   $passCount\n";
+   print STDERR "Number of Failures: $failCount\n";
+
+   unlink $filename;
+   rmdir $WORKDIR;
+}
+
+#========================================================================
+# Function:	NextTest()
+# Purpose:	Introduce a new test -- increment test id, write
+#		separator and test information to log file.
+#========================================================================
+sub NextTest
+{
+   local($description) = @_;
+
+
+   ++$testID;
+   print LOGFILE '-' x 76, "\n";
+   $testDescription = $description;
+}
+
+#========================================================================
+# Function:	TestPasses()
+# Purpose:	The current test passed.  Write result to logfile, and
+#		increment the count of successful tests.
+#========================================================================
+sub TestPasses
+{
+   printf LOGFILE ("%3d %s%s%s", $testID, $testDescription,
+		   ' ' x (68 - length($testDescription)), "PASS\n");
+   # printf STDERR "%3d: pass (%s)\n", $testID, $testDescription;
+   print STDERR ".";
+   print STDERR "\n" if $testID % 70 == 0;
+   ++$passCount;
+}
+
+#========================================================================
+# Function:	TestFails()
+# Purpose:	The current test failed.  Write result to logfile,
+#		including the html which failed, and the output from weblint.
+#========================================================================
+sub TestFails
+{
+   local($html, @results) = @_;
+   local($string);
+
+
+   # printf STDERR "%3d: FAIL (%s)\n", $testID, $testDescription;
+   $string = sprintf("%3d: %s", $testID, $testDescription);
+   push(@failedTests, $string);
+   print STDERR "!";
+   print STDERR "\n" if $testID % 70 == 0;
+
+   printf LOGFILE ("%3d %s%s%s", $testID, $testDescription,
+		   ' ' x (68 - length($testDescription)), "FAIL\n");
+
+   $html =~ s/\n/\n    /g;
+   print LOGFILE "\n  HTML:\n    $html\n\n";
+   print LOGFILE "  WEBLINT OUTPUT:\n";
+   while (@results > 1)
+   {
+      ($line, $wid) = splice(@results, 0, 2);
+      print LOGFILE "    line $line: $wid\n";
+   }
+   print LOGFILE "\n";
+   ++$failCount;
+}
+
+#========================================================================
+# Function:	PickTmpdir
+# Purpose:	Pick a temporary working directory. If TMPDIR environment
+#		variable is set, then we try that first.
+#========================================================================
+sub PickTmpdir
+{
+   local(@options) = @_;
+   local($tmpdir);
+
+   @options = ($ENV{'TMPDIR'}, @options) if defined $ENV{'TMPDIR'};
+   foreach $tmpdir (@options)
+   {
+      return $tmpdir if -d $tmpdir && -w $tmpdir;
+   }
+   die "$PROGRAM: unable to find a temporary directory.\n",
+       ' ' x (length($PROGRAM)+2), "tried: ",join(' ',@options),"\n";
+}
+
+#============================================================================
+#============================================================================
+
+__END__
+simple syntactically correct html
+####
+<HTML>
+<HEAD><TITLE>test</TITLE></HEAD>
+<BODY>this is the body</BODY>
+</HTML>
+#------------------------------------------------------------------------
+paragraph usage
+####
+<HTML>
+<HEAD><TITLE>test</TITLE></HEAD>
+<BODY>first paragraph<P>second paragraph</BODY>
+</HTML>
+#------------------------------------------------------------------------
+html which starts with DOCTYPE specifier
+####
+<!DOCTYPE HTML PUBLIC '-//W3O//DTD WWW HTML 2.0//EN'>
+<HTML>
+<HEAD><TITLE>test</TITLE></HEAD>
+<BODY>this is the body</BODY>
+</HTML>
+#------------------------------------------------------------------------
+acceptable usage of META element
+####
+<HTML><HEAD><TITLE>foo</TITLE>
+<META NAME="IndexType" CONTENT="Service"></HEAD>
+<BODY>this is the body</BODY></HTML>
+#------------------------------------------------------------------------
+correct use of information type and font style elements
+####
+<HTML><HEAD><TITLE>foo</TITLE></HEAD><BODY>
+<EM>Emphasized Text</EM>
+<CITE>Cited Text</CITE>
+<STRONG>Strongly emphasized Text</STRONG>
+<CODE>Teletype Text</CODE>
+<SAMP>sequence of literal characters</SAMP>
+<KBD>Keyboarded Text</KBD>
+<VAR>Variable name</VAR>
+<DFN>Defining instance</DFN>
+<B>Bold text</B>
+<I>Italic text</I>
+<TT>Teletype text</TT>
+<U>Underlined text</U>
+<STRIKE>Striked through text</STRIKE>
+<BIG>Big text</BIG>
+<SMALL>Small text</SMALL>
+<SUB>Subscript text</SUB>
+<SUP>Superscript text</SUP>
+</BODY></HTML>
+#------------------------------------------------------------------------
+IMG element with ALT and ISMAP attributes
+####
+<HTML><HEAD><TITLE>foo</TITLE></HEAD><BODY>
+<IMG SRC=foo.gif ISMAP ALT="alt text">
+</BODY></HTML>
+#------------------------------------------------------------------------
+newline within a tag
+####
+<HTML><HEAD><TITLE>foo</TITLE></HEAD><BODY>
+<IMG SRC="foo.gif"
+ ALT="alt text">
+</BODY></HTML>
+#------------------------------------------------------------------------
+simple comment
+####
+<!-- comment before the HTML element -->
+<HTML>
+<!-- comment between the HTML and HEAD elements -->
+<HEAD>
+<!-- comment in the HEAD element -->
+<TITLE>foo</TITLE></HEAD><BODY>
+<!-- this is a simple comment in the body -->
+this is the body
+</BODY>
+<!-- comment between end of BODY and end of HTML -->
+</HTML>
+<!-- comment after the end of the HTML element -->
+####
+#------------------------------------------------------------------------
+comment with space before the closing >
+####
+<HTML><HEAD><TITLE>foo</TITLE></HEAD><BODY>
+<!-- this is a simple comment -- >
+this is the body
+</BODY></HTML>
+
+#------------------------------------------------------------------------
+whitespace around the = of an element attribute
+####
+<HTML><HEAD><TITLE>foo</TITLE></HEAD><BODY>
+<IMG SRC = foo.gif ALT="alt text">
+</BODY></HTML>
+#------------------------------------------------------------------------
+legal unordered list
+####
+<HTML><HEAD><TITLE>foo</TITLE></HEAD><BODY>
+<UL>
+<LI>first item
+<LI>second item</LI>
+</UL>
+</BODY></HTML>
+#------------------------------------------------------------------------
+legal definition list
+####
+<HTML><HEAD><TITLE>foo</TITLE></HEAD><BODY>
+<DL>
+<DT>first tag<DD>first definition
+<DT>second tag<DD>second definition
+</DL>
+</BODY></HTML>
+#------------------------------------------------------------------------
+simple table
+####
+<HTML><HEAD><TITLE>foo</TITLE></HEAD><BODY>
+<TABLE><TR><TH>height<TD>1.0<TR><TH>weight<TD>1.0</TABLE>
+</BODY></HTML>
+#------------------------------------------------------------------------
+table without TR
+####
+<HTML><HEAD><TITLE>foo</TITLE></HEAD><BODY>
+<TABLE><TH>height<TD>1.0<TR><TH>weight<TD>1.0</TABLE>
+</BODY></HTML>
+####
+2:required-context
+2:required-context
+#------------------------------------------------------------------------
+no HTML tags around document
+####
+<HEAD><TITLE>title</TITLE></HEAD>
+<BODY>this is the body</BODY>
+####
+1:html-outer
+1:must-follow
+#------------------------------------------------------------------------
+whitespace between opening < and tag name
+####
+<HTML><HEAD>< TITLE>title</TITLE></HEAD>
+<BODY>this is the body</BODY></HTML>
+####
+1:leading-whitespace
+#------------------------------------------------------------------------
+no TITLE element in HEAD
+####
+<HTML>
+<HEAD></HEAD>
+<BODY>this is the body</BODY>
+</HTML>
+####
+2:empty-container
+2:require-head
+#------------------------------------------------------------------------
+unclosed TITLE in HEAD
+####
+<HTML>
+<HEAD><TITLE></HEAD>
+<BODY>this is the body</BODY>
+</HTML>
+####
+2:unclosed-element
+#------------------------------------------------------------------------
+bad style to use "here" as anchor text
+####
+<HTML>
+<HEAD><TITLE>title</TITLE></HEAD>
+<BODY><A HREF="foo.html">here</A></BODY>
+</HTML>
+####
+3:here-anchor
+#------------------------------------------------------------------------
+mis-matched heading tags <H1> .. </H2>
+####
+<HTML>
+<HEAD><TITLE>title</TITLE></HEAD>
+<BODY><H1>title</H2></BODY>
+</HTML>
+####
+3:heading-mismatch
+#------------------------------------------------------------------------
+obsolete element
+####
+<HTML>
+<HEAD><TITLE>title</TITLE></HEAD>
+<BODY><XMP>foobar()</XMP></BODY></HTML>
+####
+3:obsolete
+#------------------------------------------------------------------------
+illegal attribute in B element
+####
+<HTML>
+<HEAD><TITLE>title</TITLE></HEAD>
+<BODY><B FOO>foobar</B></BODY></HTML>
+####
+3:unknown-attribute
+#------------------------------------------------------------------------
+empty tag: <>
+####
+<HTML>
+<HEAD><TITLE>title</TITLE></HEAD>
+<BODY><>this is the body</BODY></HTML>
+####
+3:unknown-element
+#------------------------------------------------------------------------
+Netscape tags *without* Netscape extension enabled
+####
+<HTML>
+<HEAD><TITLE>title</TITLE></HEAD>
+<BODY BGCOLOR="#ffffff">
+<CENTER>centered text</CENTER>
+<BLINK>blinking text</BLINK>
+<FONT SIZE="+1">larger font size text</FONT>
+</BODY></HTML>
+####
+5:extension-markup
+5:extension-markup
+#------------------------------------------------------------------------
+Netscape tags *with* Netscape extension enabled
+-x Netscape
+####
+<HTML>
+<HEAD><TITLE>title</TITLE></HEAD>
+<BODY BGCOLOR="#ffffff">
+<CENTER>centered text</CENTER>
+<BLINK>blinking text</BLINK>
+<FONT SIZE="+1">larger font size text</FONT>
+</BODY></HTML>
+####
+#------------------------------------------------------------------------
+not allowed to nest FORM elements
+####
+<HTML>
+<HEAD><TITLE>title</TITLE></HEAD>
+<BODY>
+<FORM METHOD=post ACTION="http://www.cre.canon.co.uk/foo">
+<FORM METHOD=post ACTION="http://www.cre.canon.co.uk/foo">
+This is inside the nested form
+</FORM>
+</FORM></BODY></HTML>
+####
+5:nested-element
+#------------------------------------------------------------------------
+CAPTION element appearing outside of TABLE or FIG
+####
+<HTML><HEAD><TITLE>title</TITLE></HEAD>
+<BODY>
+<TABLE><CAPTION>legal use of caption</CAPTION></TABLE>
+<CAPTION>this is an invalid use of caption</CAPTION>
+</BODY></HTML>
+####
+4:required-context
+#------------------------------------------------------------------------
+LI element must be used in DIR, MENU, OL, OL or UL
+####
+<HTML><HEAD><TITLE>title</TITLE></HEAD>
+<BODY>
+<DIR><LI>legal list item in DIR</DIR>
+<MENU><LI>legal list item in MENU</MENU>
+<OL><LI>legal list item in OL</OL>
+<UL><LI>legal list item in UL</UL>
+<LI>illegal list item
+</BODY></HTML>
+####
+7:required-context
+#------------------------------------------------------------------------
+unclosed comment
+####
+<HTML><HEAD><TITLE>title</TITLE></HEAD>
+<BODY>
+<!-- this is an unclosed comment >
+</BODY></HTML>
+####
+3:unclosed-comment
+#------------------------------------------------------------------------
+use of physical font markup
+-e physical-font
+####
+<HTML><HEAD><TITLE>title</TITLE></HEAD>
+<BODY>
+<B>This is bold text</B>
+<STRONG>This is strong text</STRONG>
+</BODY></HTML>
+####
+3:physical-font
+#------------------------------------------------------------------------
+repeated attribute
+####
+<HTML><HEAD><TITLE>title</TITLE></HEAD>
+<BODY>
+<IMG SRC="foo.gif" SRC="foo.gif" ALT="alt text">
+</BODY></HTML>
+####
+3:repeated-attribute
+#------------------------------------------------------------------------
+no HTML tags around document, last thing is valid comment
+####
+<HEAD><TITLE>title</TITLE></HEAD>
+<BODY>this is the body</BODY>
+<!-- this is a valid comment -->
+####
+1:html-outer
+1:must-follow
+#------------------------------------------------------------------------
+spurious text between HEAD and BODY elements
+####
+<HTML><HEAD><TITLE>title</TITLE></HEAD>
+Should not put any text here!
+<BODY>this is the body</BODY></HTML>
+####
+3:must-follow
+#------------------------------------------------------------------------
+empty title element
+####
+<HTML><HEAD><TITLE></TITLE></HEAD>
+<BODY>this is the body</BODY></HTML>
+####
+1:empty-container
+#------------------------------------------------------------------------
+empty list element
+####
+<HTML><HEAD><TITLE>title</TITLE></HEAD>
+<BODY>
+<UL>
+<LI>this is the first element
+<LI>
+<LI>this is the third or second element...
+</UL>
+</BODY></HTML>
+####
+5:empty-container
+#------------------------------------------------------------------------
+attributes on closing tag
+####
+<HTML><HEAD><TITLE>title</TITLE></HEAD>
+<BODY>
+<A NAME="foobar">bleh</A NAME="foobar">
+</BODY></HTML>
+####
+3:closing-attribute
+#------------------------------------------------------------------------
+use of ' as attribute value delimiter
+####
+<HTML><HEAD><TITLE>foo</TITLE></HEAD><BODY>
+<IMG SRC = foo.gif ALT='alt text'>
+</BODY></HTML>
+####
+2:attribute-delimiter
+#------------------------------------------------------------------------
+IMG without HEIGHT and WIDTH attributes
+-e img-size
+####
+<HTML><HEAD><TITLE>foo</TITLE></HEAD><BODY>
+<IMG SRC = foo.gif ALT="alt text">
+</BODY></HTML>
+####
+2:img-size
+#------------------------------------------------------------------------
+non-empty container, with comment last thing
+####
+<HTML>
+<HEAD><TITLE>title</TITLE></HEAD>
+<BODY>
+<PRE>
+Some text ...
+<!-- last thing in container is a valid comment -->
+</PRE>
+</BODY></HTML>
+####
+#------------------------------------------------------------------------
+use of -pedantic command-line switch
+-pedantic
+####
+<HTML><HEAD><TITLE>foo</TITLE></HEAD><BODY>
+<IMG SRC = foo.gif ALT="alt text">
+<B>This is bold text -- should use the STRONG element</B>
+<A HREF="foobar.html">non-existent file</A>
+</BODY></HTML>
+####
+1:mailto-link
+2:img-size
+3:physical-font
+#------------------------------------------------------------------------
+leading whitespace in container
+-e container-whitespace
+####
+<HTML><HEAD><TITLE>foo</TITLE></HEAD><BODY>
+<A HREF=foobar.html> hello</A>
+</BODY></HTML>
+####
+2:container-whitespace
+#------------------------------------------------------------------------
+valid Java applet
+-x Netscape
+-x Microsoft
+####
+<HTML>
+<HEAD><TITLE>title</TITLE></HEAD>
+<BODY>
+<APPLET CODEBASE="http://java.sun.com/JDK-prebeta1/applets/NervousText" CODE="NervousText.class" WIDTH=400 HEIGHT=75 ALIGN=CENTER>
+<PARAM NAME="text" VALUE="This is the applet viewer.">
+<BLOCKQUOTE>
+If you were using a Java-enabled browser,
+you wouldn't see this!
+</BLOCKQUOTE>
+</APPLET>
+</BODY></HTML>
+#------------------------------------------------------------------------
+PARAM can only appear in an APPLET element
+-x Netscape
+-x Microsoft
+####
+<HTML><HEAD><TITLE>foo</TITLE></HEAD><BODY>
+<PARAM NAME="text" VALUE="This is the applet viewer.">
+</BODY></HTML>
+####
+2:required-context
+#------------------------------------------------------------------------
+valid use of Netscape 2 markup
+-x Netscape
+####
+<HTML>
+<HEAD><TITLE>title</TITLE></HEAD>
+<BODY>
+<BIG>this is big text</BIG>
+<SMALL>this is small text</SMALL>
+<SUB>this is subscript text</SUB>
+<SUP>this is superscript text</SUP>
+<MAP NAME="map1">
+<AREA SHAPE="RECT" COORDS="10,10,20,20" HREF="foo.html">
+<AREA SHAPE="RECT" COORDS="40,40,50,50" NOHREF>
+</MAP>
+<IMG SRC="pic.gif" ALT=map USEMAP="#map1">
+<FORM ENCTYPE="multipart/form-data" ACTION="_URL_" METHOD=POST>
+<INPUT TYPE=submit VALUE="Send File">
+</FORM>
+</BODY></HTML>
+
+#------------------------------------------------------------------------
+AREA can only appear in a MAP, MAP must have a NAME
+-x Netscape
+####
+<HTML><HEAD><TITLE>foo</TITLE></HEAD><BODY>
+<AREA SHAPE="RECT" COORDS="10,10,20,20" HREF="foo.html">
+<MAP>
+<AREA SHAPE="RECT" COORDS="40,40,50,50" NOHREF>
+</MAP>
+</BODY></HTML>
+####
+2:required-context
+3:required-attribute
+#------------------------------------------------------------------------
+non-empty list element, with comment last thing
+####
+<HTML>
+<HEAD><TITLE>title</TITLE></HEAD>
+<BODY>
+<UL>
+<LI>line 9
+<!-- line 10 -->
+<LI>line 11
+</UL>
+</BODY></HTML>
+####
+#------------------------------------------------------------------------
+html which doesn't start with DOCTYPE
+-e require-doctype
+####
+<HTML>
+<HEAD><TITLE>test</TITLE></HEAD>
+<BODY>this is the body</BODY>
+</HTML>
+####
+1:require-doctype
+#------------------------------------------------------------------------
+html which starts with DOCTYPE
+-e require-doctype
+####
+<!DOCTYPE HTML PUBLIC '-//W3O//DTD WWW HTML 2.0//EN'>
+<HTML>
+<HEAD><TITLE>test</TITLE></HEAD>
+<BODY>this is the body</BODY>
+</HTML>
+#------------------------------------------------------------------------
+should use &gt; in place of >
+####
+<HTML>
+<HEAD><TITLE>test</TITLE></HEAD>
+<BODY>
+text with > instead of &gt;
+</BODY>
+</HTML>
+####
+4:literal-metacharacter
+#------------------------------------------------------------------------
+IMG element with LOWSRC attribute
+-x Netscape
+####
+<HTML>
+<HEAD><TITLE>test</TITLE></HEAD>
+<BODY>
+<IMG SRC="foo.gif" LOWSRC="lowfoo.gif" ALT="alt text">
+</BODY>
+</HTML>
+#------------------------------------------------------------------------
+Java applet using Netscape extensions
+-x Netscape
+####
+<HTML>
+<HEAD><TITLE>title</TITLE></HEAD>
+<BODY BACKGROUND="background.gif">
+<APPLET CODEBASE="http://java.sun.com/JDK-prebeta1/applets/NervousText" CODE="NervousText.class" WIDTH=400 HEIGHT=75 ALIGN=CENTER>
+<PARAM NAME="text" VALUE="This is the applet viewer.">
+<BLOCKQUOTE>
+If you were using a Java-enabled browser,
+you wouldn't see this!
+</BLOCKQUOTE>
+</APPLET>
+</BODY></HTML>
+#------------------------------------------------------------------------
+text appearing in unexpected context
+####
+<HTML>
+<HEAD>
+Having text here is not legal!
+<TITLE>test</TITLE></HEAD>
+<BODY>
+<UL>
+Having text here is not legal!
+</UL>
+<OL>
+Having text here is not legal!
+</OL>
+<DL>
+Having text here is not legal!
+</DL>
+<TABLE>
+Having text here is not legal!
+<TR>
+Having text here is not legal!
+<TD>This is ok</TD>
+</TR>
+</TABLE>
+</BODY></HTML>
+####
+4:bad-text-context
+8:bad-text-context
+11:bad-text-context
+14:bad-text-context
+17:bad-text-context
+19:bad-text-context
+#------------------------------------------------------------------------
+IMG element with illegal value for ALIGN attribute
+####
+<HTML><HEAD><TITLE>foo</TITLE></HEAD><BODY>
+<IMG SRC=foo.gif ALIGN=MODDLE ALT="alt text=">
+</BODY></HTML>
+####
+2:attribute-format
+#------------------------------------------------------------------------
+new Netscape markup
+-x Netscape
+####
+<HTML>
+<HEAD><TITLE>test</TITLE></HEAD>
+<BODY>
+To <A HREF="foo.html" TARGET="myWindow">open a window</A>
+<FONT COLOR="#00ff00">blue text</FONT>
+<FORM ACTION="foo.html" METHOD=POST>
+<TEXTAREA NAME=foo ROWS=24 COLS=24 WRAP=PHYSICAL>
+hello</TEXTAREA>
+</FORM>
+</BODY>
+</HTML>
+#------------------------------------------------------------------------
+valid FRAMESET example with FRAMES
+-x Netscape
+####
+<HTML>
+<HEAD><TITLE>test</TITLE></HEAD>
+<FRAMESET>
+<FRAME SRC="cell.html">
+<FRAME SRC="cell.html">
+</FRAMESET>
+</HTML>
+#------------------------------------------------------------------------
+FRAME outside of FRAMESET is illegal
+-x Netscape
+####
+<HTML>
+<HEAD><TITLE>test</TITLE></HEAD>
+<BODY>
+<FRAME SRC="cell.html">
+</BODY>
+</HTML>
+####
+4:required-context
+
+#------------------------------------------------------------------------
+A valid JavaScript example
+-x Netscape
+####
+<HTML>
+<HEAD><TITLE>test</TITLE>
+<SCRIPT LANGUAGE="JavaScript">
+document.write("Hello net.")
+</SCRIPT>
+</HEAD>
+<BODY>
+That's all, folks.
+</BODY>
+</HTML>
+#------------------------------------------------------------------------
+FORM element with SELECT element which has SIZE attribute
+####
+<HTML>
+<HEAD><TITLE>title</TITLE></HEAD>
+<BODY>
+<FORM METHOD=post ACTION="http://www.cre.canon.co.uk/foo">
+<SELECT NAME="foobar" SIZE="50,8">
+<OPTION>foobar
+</SELECT>
+</FORM></BODY></HTML>
+#------------------------------------------------------------------------
+HR element can have percentage width in Netscape
+-x Netscape
+####
+<HTML>
+<HEAD><TITLE>title</TITLE></HEAD>
+<BODY>
+<HR WIDTH="50%">
+</BODY></HTML>
+#------------------------------------------------------------------------
+Legal use of Netscape-specific table attributes
+-x Netscape
+####
+<HTML>
+<HEAD><TITLE>title</TITLE></HEAD>
+<BODY>
+<TABLE BORDER=2 CELLPADDING=2 CELLSPACING=2>
+<TR><TH WIDTH="10%">Hello<TD WIDTH=2>World</TR>
+</TABLE>
+</BODY></HTML>
+####
+
+#------------------------------------------------------------------------
+Ok to have empty TD elements in a table
+####
+<HTML>
+<HEAD><TITLE>title</TITLE></HEAD>
+<BODY>
+<TABLE>
+<TR><TD></TD></TR>
+</TABLE>
+</BODY></HTML>
+#------------------------------------------------------------------------
+ordered lists of different TYPES
+-x Netscape
+####
+<HTML>
+<HEAD><TITLE>title</TITLE></HEAD>
+<BODY>
+<OL>
+<LI>Basic ordered list item
+</OL>
+<OL TYPE=1>
+<LI>Basic ordered list item (same as default)
+</OL>
+<OL TYPE=a>
+<LI>Basic ordered list item
+</OL>
+<OL TYPE=A>
+<LI>Basic ordered list item
+</OL>
+<OL TYPE=i>
+<LI>Basic ordered list item
+</OL>
+<OL TYPE=I>
+<LI>Basic ordered list item
+</OL>
+</BODY></HTML>
+#------------------------------------------------------------------------
+valid use of Microsoft specific markup
+-x Microsoft
+####
+<HTML>
+<HEAD><TITLE>title</TITLE>
+<BGSOUND SRC="tune.wav" LOOP=5>
+</HEAD>
+<BODY TOPMARGIN=2 LEFTMARGIN=2>
+<TABLE CELLPADDING=2 CELLSPACING=2>
+<CAPTION ALIGN=CENTER VALIGN=BOTTOM>Hello</CAPTION>
+<TR><TD></TD></TR>
+</TABLE>
+<FONT COLOR=RED FACE="Lucida" SIZE=3>Red lucida text</FONT>
+<MARQUEE BGCOLOR="#FFFFBB" DIRECTION=RIGHT BEHAVIOR=SCROLL
+SCROLLAMOUNT=10 SCROLLDELAY=200 WIDTH="50%" HEIGHT="50%"
+><FONT COLOR="WHITE"
+>This is a scrolling marquee.</FONT></MARQUEE>
+</BODY></HTML>
+#------------------------------------------------------------------------
+more valid use of Microsoft specific markup
+-x Microsoft
+####
+<HTML>
+<HEAD><TITLE>title</TITLE>
+</HEAD>
+<BODY ALINK=red VLINK=blue LINK=green>
+Hello
+<MARQUEE WIDTH=200 HEIGHT=200>Hello</MARQUEE>
+</BODY></HTML>
+#------------------------------------------------------------------------
+Use of Microsoft markup without Microsoft extension
+####
+<HTML>
+<HEAD><TITLE>test</TITLE></HEAD>
+<BODY TOPMARGIN=2 LEFTMARGIN=2>
+<FONT COLOR=RED FACE="Lucida" SIZE=3>Red lucida text</FONT>
+</BODY>
+</HTML>
+####
+3:extension-attribute
+3:extension-attribute
+4:extension-attribute
+#------------------------------------------------------------------------
+valid FRAMESET with ROWS and COLS attributes
+-x Netscape
+####
+<HTML>
+<HEAD><TITLE>test</TITLE></HEAD>
+<FRAMESET ROWS="20%,60%,20%" COLS="*,2*">
+<FRAME SRC="cell.html">
+<FRAME SRC="cell.html">
+<FRAME SRC="cell.html">
+<FRAME SRC="cell.html">
+<FRAME SRC="cell.html">
+<FRAME SRC="cell.html">
+</FRAMESET>
+</HTML>
+#------------------------------------------------------------------------
+BASE element with only TARGET attribute (Netscape)
+-x Netscape
+####
+<HTML>
+<HEAD>
+<BASE TARGET="banana">
+<TITLE>test</TITLE>
+</HEAD>
+<BODY>this is the body</BODY>
+</HTML>
+#------------------------------------------------------------------------
+use of FONT element with no attributes
+-x Netscape
+####
+<HTML>
+<HEAD>
+<TITLE>test</TITLE>
+</HEAD>
+<BODY>
+this is the <FONT>body</FONT>
+</BODY>
+</HTML>
+####
+6:expected-attribute
+#------------------------------------------------------------------------
+Netscape table with percentage WIDTH
+-x Netscape
+####
+<HTML>
+<HEAD>
+<TITLE>test</TITLE>
+</HEAD>
+<BODY>
+<TABLE BORDER = 5 CELLPADDING=5 CELLSPACING=5 WIDTH="100%">
+<TR><TD>Hello</TD></TR>
+</TABLE>
+</BODY>
+</HTML>
+#------------------------------------------------------------------------
+Netscape list with different TYPE bullets
+-x Netscape
+####
+<HTML>
+<HEAD>
+<TITLE>test</TITLE>
+</HEAD>
+<BODY>
+<UL TYPE="disc">
+<LI>First item
+<LI TYPE="circle">circle bullet
+<LI TYPE="square">square bullet
+</UL>
+</BODY>
+</HTML>
+#------------------------------------------------------------------------
+correct and incorrect values for CLEAR attribute
+####
+<HTML>
+<HEAD><TITLE>test</TITLE></HEAD>
+<BODY>
+ok left<BR CLEAR=LEFT>
+ok right<BR CLEAR=RIGHT>
+ok all<BR CLEAR=ALL>
+not ok<BR CLEAR=RIHGT>
+</BODY>
+</HTML>
+####
+7:attribute-format
+#------------------------------------------------------------------------
+leading whitespace in list item
+-e container-whitespace
+####
+<HTML>
+<HEAD><TITLE>test</TITLE></HEAD>
+<BODY>
+<UL>
+<LI>First item
+<LI> Second item
+<LI>Third item
+</UL>
+</BODY>
+</HTML>
+####
+6:container-whitespace
+#------------------------------------------------------------------------
+illegal color attribute values
+-x Netscape
+####
+<HTML>
+<HEAD><TITLE>test</TITLE></HEAD>
+<BODY ALINK="#ffaaff" VLINK="#ggaagg">
+This is the body of the page
+</BODY>
+</HTML>
+####
+3:attribute-format
+
+#------------------------------------------------------------------------
+Valid use of the Microsoft color attributes
+-x Microsoft
+####
+<HTML>
+<HEAD>
+<TITLE>test</TITLE>
+</HEAD>
+<BODY TEXT=black BGCOLOR=yellow LINK=Blue ALINK=red VLINK=green>
+<FONT COLOR="#ff0000">red text</FONT>
+<TABLE BORDER BORDERCOLOR=teal BORDERCOLORLIGHT=Fuchsia
+	BORDERCOLORDARK=Gray>
+<TR><TH>Bleh</TH></TR>
+</TABLE>
+</BODY>
+</HTML>
+#------------------------------------------------------------------------
+use of percentages in WIDTH attribute
+-x Netscape
+####
+<HTML>
+<HEAD>
+<TITLE>test</TITLE>
+</HEAD>
+<BODY>
+<TABLE WIDTH="100%">
+<TR><TH>Bleh</TH><TD>Foobar</TD></TR>
+</TABLE>
+</BODY>
+</HTML>
+#------------------------------------------------------------------------
+complicated FRAME example
+-x Netscape
+####
+<HTML>
+<HEAD>
+        <TITLE>Netscape example</TITLE>
+</HEAD>
+<FRAMESET COLS="50%,50%">
+<NOFRAMES>
+<BODY>
+<H1>Title of non-frames version</H1>
+This will be seen if you don't have a FRAME capable browser
+</BODY>
+</NOFRAMES>
+
+<FRAMESET ROWS="50%,50%">
+  <FRAME SRC="cell.html"><FRAME SRC="cell.html">
+</FRAMESET>
+<FRAMESET ROWS="33%,33%,33%">
+  <FRAME SRC="cell.html"><FRAME SRC="cell.html">
+<FRAME SRC="cell.html">
+</FRAMESET>
+</FRAMESET>
+</HTML>
+#------------------------------------------------------------------------
+unquoted attribute value which should be quoted
+-x Netscape
+####
+<HTML>
+<HEAD><TITLE>test</TITLE></HEAD>
+<BODY TEXT=#00ffff>
+<TABLE WIDTH=100%>
+<TR><TH>Heading<TD>Datum</TD></TR>
+</TABLE>
+</BODY>
+</HTML>
+####
+3:quote-attribute-value
+4:quote-attribute-value
+#------------------------------------------------------------------------
+use of > in a PRE element
+####
+<HTML>
+<HEAD><TITLE>test</TITLE></HEAD>
+<BODY>
+<PRE>
+   if (x > y)
+      printf("x is greater than y");
+</PRE>
+</BODY>
+</HTML>
+####
+5:meta-in-pre
+#------------------------------------------------------------------------
+heading inside an anchor
+####
+<HTML>
+<HEAD><TITLE>test</TITLE></HEAD>
+<BODY>
+<A NAME="foo"><H2>Bogus heading in anchor</H2></A>
+</BODY>
+</HTML>
+####
+4:heading-in-anchor
+#------------------------------------------------------------------------
+TITLE of page is longer then 64 characters
+####
+<HTML>
+<HEAD><TITLE>WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW</TITLE></HEAD>
+<BODY>
+body of page
+</BODY>
+</HTML>
+####
+2:title-length
+#------------------------------------------------------------------------
+use of WRAP=HARD in TEXTAREA
+-x Netscape
+####
+<HTML>
+<HEAD>
+<TITLE>test</TITLE>
+</HEAD>
+<BODY>
+<FORM ACTION="foo.html" METHOD=POST>
+<TEXTAREA NAME=foo ROWS=24 COLS=24 WRAP=HARD>
+hello</TEXTAREA>
+</FORM>
+</BODY>
+</HTML>
+#------------------------------------------------------------------------
+empty list items
+####
+<HTML>
+<HEAD><TITLE>test</TITLE></HEAD>
+<BODY>
+<UL>
+<LI>
+<LI>Second item
+<LI>
+<LI>Fourth item
+<LI>
+</UL>
+</BODY>
+</HTML>
+####
+5:empty-container
+7:empty-container
+9:empty-container
+#------------------------------------------------------------------------
+IMG with ALT set to empty string
+####
+<HTML>
+<HEAD>
+<TITLE>test</TITLE>
+</HEAD>
+<BODY>
+<IMG SRC="foo.gif" ALT="">
+<IMG SRC="foo.gif" ALT=''>
+</BODY>
+</HTML>
+#------------------------------------------------------------------------
+use of > multiple times in a PRE element
+####
+<HTML>
+<HEAD><TITLE>test</TITLE></HEAD>
+<BODY>
+<PRE>
+   if (x > y)
+      foobar();
+   if (x > z)
+      barfoo();
+</PRE>
+</BODY>
+</HTML>
+####
+5:meta-in-pre
+7:meta-in-pre
+#------------------------------------------------------------------------
+don't check attributes of unknown elements
+####
+<HTML>
+<HEAD><TITLE>test</TITLE></HEAD>
+<BODY>
+Hello, <BOB SIZE="+1">World!</BOB>
+</BODY>
+</HTML>
+####
+4:unknown-element
+4:unknown-element
+#------------------------------------------------------------------------
+images with all variants of ALIGN for Netscape
+-x Netscape
+####
+<HTML>
+<HEAD>
+<TITLE>test</TITLE>
+</HEAD>
+<BODY>
+<IMG SRC="foo.gif" ALT="" ALIGN=LEFT>
+<IMG SRC="foo.gif" ALT="" ALIGN=RIGHT>
+<IMG SRC="foo.gif" ALT="" ALIGN=TOP>
+<IMG SRC="foo.gif" ALT="" ALIGN=TEXTTOP>
+<IMG SRC="foo.gif" ALT="" ALIGN=MIDDLE>
+<IMG SRC="foo.gif" ALT="" ALIGN=ABSMIDDLE>
+<IMG SRC="foo.gif" ALT="" ALIGN=BASELINE>
+<IMG SRC="foo.gif" ALT="" ALIGN=BOTTOM>
+<IMG SRC="foo.gif" ALT="" ALIGN=ABSBOTTOM>
+</BODY>
+</HTML>
+#------------------------------------------------------------------------
+ISINDEX with PROMPT
+####
+<HTML>
+<HEAD>
+<ISINDEX PROMPT="Enter Surname:">
+<TITLE>test</TITLE>
+</HEAD>
+<BODY>
+Hello, World!
+</BODY>
+</HTML>
+#------------------------------------------------------------------------
+ISINDEX with HREF is illegal in HTML 3.2
+####
+<HTML>
+<HEAD>
+<ISINDEX HREF="phone.db" PROMPT="Enter Surname:">
+<TITLE>test</TITLE>
+</HEAD>
+<BODY>
+Hello, World!
+</BODY>
+</HTML>
+####
+3:extension-attribute
+#------------------------------------------------------------------------
+Checking against new microsoft spec #1
+-x Microsoft
+####
+<HTML>
+<HEAD>
+  <TITLE>test</TITLE>
+  <BASE HREF="http://www.foo.bar/" TARGET="that_window">
+  <BGSOUND SRC="tune.wav" LOOP=5>
+  <ISINDEX ACTION="phone.db" PROMPT="Enter Surname:">
+  <LINK HREF="other-doc.html">
+  <META HTTP-EQUIV=refresh CONTENT="5; URL=foo.html">
+  <META NAME="ROBOTS" CONTENT="NOFOLLOW">
+</HEAD>
+<BODY BACKGROUND="background.gif" BGCOLOR=white
+ BGPROPERTIES=FIXED LEFTMARGIN=2 LINK=red TEXT=black VLINK=blue
+ TOPMARGIN=5>
+<A HREF="foo.html" NAME="foobar" REL=parent REV=made
+ TARGET="_top" TITLE="The Foo Page">Foo</A>
+<ADDRESS>Neil Bowers, Canon Research Europe</ADDRESS>
+<APPLET ALIGN=CENTER ALT="an applet"
+ CODEBASE="http://foo.com/applets/" CODE="foo.app"
+ HEIGHT=100 HSPACE=5 NAME="Foo Applet" VSPACE=5 WIDTH=100>
+If you were using a Java enabled browser, you wouldn't see this.
+</APPLET>
+<MAP NAME="mappie">
+<AREA COORDS="1,1,1,1" SHAPE=RECT HREF="http://www.foo.com/"
+ TARGET="_top">
+</MAP>
+<B>bold text</B>
+<BASEFONT COLOR=red ID=times SIZE=3>
+<BIG>This text is a little bit bigger</BIG>
+<BLOCKQUOTE>This is in a blockquote element</BLOCKQUOTE>
+<BR CLEAR=LEFT><BR CLEAR=RIGHT><BR CLEAR=ALL>
+<CENTER>This text will be centered</CENTER>
+<CITE>This is a citation</CITE>
+<CODE>foobar() if $do_foo;</CODE>
+<COMMENT>This is a comment</COMMENT>
+<DL><DT>coffee<DD>one of the basic food groups</DL>
+<DFN>This is a definition</DFN>
+<DIR><LI>dirlist item 1<LI>dirlist item 2</DIR>
+<DIV ALIGN=LEFT>left justified text</DIV>
+<DIV ALIGN=CENTER>center justified text</DIV>
+<DIV ALIGN=RIGHT>right justified text</DIV>
+<EM>emphasized text</EM>
+<EMBED HEIGHT=50 NAME="embeddedObject"
+ SRC="http://www.foo.com/object" WIDTH=50>
+<FONT FACE="arial" COLOR=red SIZE=4>red arial text</FONT>
+<FORM METHOD=post ACTION="http://www.cre.canon.co.uk/foo"
+ TARGET="fooWindow">
+  <INPUT NAME="imgControl" SRC="foo.gif"
+   TYPE=IMAGE VALUE=5>
+  <INPUT SIZE="50,1" TYPE=TEXT MAXLENGTH=100
+   VALUE="hello">
+  <INPUT SIZE="50,1" TYPE=CHECKBOX CHECKED>
+  <SELECT MULTIPLE SIZE=100 NAME=fruit>
+    <OPTION SELECTED VALUE=1>Bananas
+    <OPTION          VALUE=2>Oranges
+  </SELECT>
+  <TEXTAREA COLS=60 NAME=textbox ROWS=5>
+    default contents
+  </TEXTAREA>
+</FORM>
+<H1>level one heading</H1>
+<HR ALIGN=LEFT COLOR=blue NOSHADE SIZE=4 WIDTH="80%">
+<I>this is in italics</I>
+<IFRAME ALIGN=CENTER FRAMEBORDER=1 MARGINHEIGHT=2 MARGINWIDTH=2
+ NAME="bob" SCROLLING=YES SRC="bob.htm">
+  This is the contents of a floating frame.
+</IFRAME>
+<IMG ALIGN=LEFT ALT="alt text" BORDER=1
+ DYNSRC="dynsrc.mpg" HEIGHT=50 HSPACE=5 ISMAP LOOP=4
+ SRC="foo.gif" USEMAP VSPACE=5 WIDTH=50>
+<KBD>text entered at the keyboard</KBD>
+<OL><LI TYPE=A VALUE=1>First item</OL>
+<LISTING>This is for listings. Ugh.</LISTING>
+<MARQUEE BEHAVIOR=SCROLL BGCOLOR="#FFFFBB"
+ DIRECTION=RIGHT HEIGHT=40 HSPACE=10 LOOP=INFINITE
+ SCROLLAMOUNT=10 SCROLLDELAY=200 VSPACE=10 WIDTH=500>
+  This is a scrolling marquee.
+</MARQUEE>
+<MENU><LI>first item in menu<LI>second menu item</MENU>
+<NOBR>a long line of text which i don't want to be broken</NOBR>
+<OBJECT ALIGN=CENTER CLASSID="CLSID:foo"
+ CODEBASE="foo/" CODETYPE=dunno DATA="foo.data"
+ HEIGHT=50 NAME=bob
+ TYPE=image WIDTH=50>
+  contents of object element.
+  <!-- dunno about correct values for TYPE yet -->
+  <PARAM NAME=home VALUE="http://www.home.com" DATAFLD=field DATASRC=bob>
+</OBJECT>
+<P ALIGN=CENTER>centered paragraph</P>
+<PLAINTEXT>some plain text</PLAINTEXT>
+<PRE>some preformatted text</PRE>
+<SAMP>some sample text</SAMP>
+<SCRIPT LANGUAGE=VBscript>
+  Visual basic script goes here
+</SCRIPT>
+<SMALL>some small text</SMALL>
+<SPAN STYLE="margin-left: 1.0in">blah blah</SPAN>
+<STRIKE>strike-through text</STRIKE>
+<STRONG>strong text</STRONG>
+Subscript: oxygen is O<SUB>2</SUB>
+Superscript: Unix<SUP>TM</SUP>
+<TABLE ALIGN=LEFT BACKGROUND="foo.gif" BGCOLOR=white BORDER=1
+ BORDERCOLOR=black BORDERCOLORLIGHT=white BORDERCOLORDARK=black
+ CELLPADDING=4 CELLSPACING=4 COLS=2 WIDTH="100%" FRAME=BORDER
+ RULES=ALL>
+<CAPTION>This is the caption for the table</CAPTION>
+
+<COLGROUP ALIGN=RIGHT>
+  <COL ALIGN=LEFT>
+  <COL ALIGN=RIGHT>
+
+  <!-- table heading section -->
+  <THEAD>
+    <TR ALIGN=LEFT BGCOLOR=white
+     BORDERCOLOR=black BORDERCOLORDARK=black
+     BORDERCOLORLIGHT=white VALIGN=TOP>
+      <TH ALIGN=CENTER BACKGROUND="header.gif" BGCOLOR=white
+       BORDERCOLOR=black BORDERCOLORDARK=black
+       BORDERCOLORLIGHT=white COLSPAN=1 NOWRAP ROWSPAN=1
+       VALIGN=TOP>Name<TH>Description
+    </TR>
+  </THEAD>
+
+  <!-- table body section -->
+  <TBODY>
+    <TR>
+      <TD ALIGN=CENTER BACKGROUND="header.gif" BGCOLOR=white
+       BORDERCOLOR=black BORDERCOLORDARK=black
+       BORDERCOLORLIGHT=white COLSPAN=1 NOWRAP ROWSPAN=1
+       VALIGN=TOP>Banana<TD>Bendy, Yellow, Tasty
+    </TR>
+  </TBODY>
+
+  <!-- table footer section -->
+  <TFOOT>
+    <TR>
+      <TH>Name<TH>Description
+    </TR>
+  </TFOOT>
+
+</TABLE>
+
+<TT>teletype text</TT>
+<U>underlined text</U>
+<UL><LI>ordered item 1<LI>unordered 2</UL>
+<VAR>variable</VAR>
+<NOBR>let's do an explicit<WBR>line break</NOBR>
+<XMP>some example text</XMP>
+</BODY>
+</HTML>
+#------------------------------------------------------------------------
+Checking new microsoft spec #2 - FRAMESET
+-x Microsoft
+####
+<HTML>
+<HEAD>
+  <TITLE>test</TITLE>
+  <BASE HREF="http://www.foo.bar/" TARGET="that_window">
+  <BGSOUND SRC="tune.wav" LOOP=5>
+</HEAD>
+<FRAMESET COLS=2 ROWS=2 FRAMEBORDER=1 FRAMESPACING=5>
+  <FRAME FRAMEBORDER=1 MARGINHEIGHT=4 MARGINWIDTH=4
+   NAME="myFrame" NORESIZE SCROLLING=YES SRC="foo.html">
+  <NOFRAMES>
+    <BODY>
+      This is what you see if you don't have a frames browser
+    </BODY>
+  </NOFRAMES>
+</FRAMESET>
+</HTML>
+#------------------------------------------------------------------------
+basic structure with Wilbur enabled
+####
+<HTML>
+<HEAD>
+  <TITLE>test</TITLE>
+</HEAD>
+<BODY BACKGROUND="back.gif" BGCOLOR=white TEXT=black
+ LINK=blue VLINK=red ALINK=purple>
+    Hello, World!
+</BODY>
+</HTML>
+#------------------------------------------------------------------------
+Wilbur test #2
+####
+<HTML>
+<HEAD>
+    <ISINDEX PROMPT="text prompt">
+    <TITLE>test</TITLE>
+    <LINK HREF="foo" REL="rel" REV=MADE TITLE="le title">
+</HEAD>
+<BODY>
+<BASEFONT SIZE=4>
+    <APPLET ALIGN=LEFT ALT="alt text" CODE="foo code"
+     CODEBASE="applets" HEIGHT=100 HSPACE=5 NAME=applet
+     VSPACE=5 WIDTH=100>
+        <PARAM NAME="fruit" VALUE="banana">
+    </APPLET>
+<MAP NAME="testmap">
+    <AREA ALT="alt test" COORDS="1,1,2,2" SHAPE=RECT
+     HREF="foo.html">
+    <AREA COORDS="2,2,4,4" SHAPE=CIRCLE NOHREF>
+</MAP>
+<BR><BR CLEAR=LEFT><BR CLEAR=RIGHT><BR CLEAR=ALL><BR CLEAR=NONE>
+<DIR><LI>item 1<LI>item 2</DIR>
+<DIR COMPACT><LI>item 1<LI>item 2</DIR>
+<DIV>a text division</DIV>
+<DIV ALIGN=LEFT>left aligned text</DIV>
+<DIV ALIGN=CENTER>center aligned text</DIV>
+<DIV ALIGN=RIGHT>right aligned text</DIV>
+<FONT SIZE=4>size 4 text</FONT>
+<FONT COLOR=red>red text</FONT>
+<H1 ALIGN=LEFT>left aligned level 1 heading</H1>
+<H2 ALIGN=CENTER>centered level 2 heading</H2>
+<H3 ALIGN=RIGHT>right aligned level 3 heading</H3>
+<H4 ALIGN=LEFT>left aligned level 4 heading</H4>
+<H5 ALIGN=CENTER>centered level 5 heading</H5>
+<H6 ALIGN=RIGHT>right aligned level 6 heading</H6>
+<IMG ALIGN=LEFT ALT="alt text" BORDER=1
+ HEIGHT=50 HSPACE=5 ISMAP
+ SRC="foo.gif" USEMAP VSPACE=5 WIDTH=50>
+<UL><LI TYPE=DISC>item 1<LI TYPE=SQUARE>item 2
+    <LI TYPE=CIRCLE>item 3</UL>
+<OL><LI TYPE=A VALUE=1>item 1<LI TYPE=a>item 2
+    <LI TYPE=i>item 3<LI TYPE=I>item 4<LI TYPE=1>item 5</OL>
+<MENU><LI>item 1<LI>item 2</MENU>
+<MENU COMPACT><LI>compact item 1<LI>compact item 2</MENU>
+<OL TYPE=a START=1 COMPACT><LI>item 1<LI>item 2</OL>
+<P ALIGN=CENTER>centered paragraph</P>
+<UL TYPE=disc COMPACT><LI>item 1<LI>item 2</UL>
+</BODY>
+</HTML>
+#------------------------------------------------------------------------
+BASEFONT must have SIZE attribute
+<none>
+-x Netscape
+####
+<HTML>
+<HEAD>
+  <TITLE>test</TITLE>
+</HEAD>
+<BODY>
+<BASEFONT>
+</BODY>
+</HTML>
+####
+6:required-attribute
+#------------------------------------------------------------------------
+Anchor (A) element with Netscape 4 attributes for Javascript
+-x Netscape
+####
+<HTML>
+<HEAD>
+  <TITLE>test</TITLE>
+</HEAD>
+<BODY>
+<A HREF=foo NAME=name ONCLICK="click()" ONMOUSEOUT="out()"
+   ONMOUSEOVER="over()" TARGET="_top">fun stuff</A>
+</BODY>
+</HTML>
+#------------------------------------------------------------------------
+Legal use of ADDRESS element
+<none>
+-x Netscape
+-x Microsoft
+####
+<HTML>
+<HEAD>
+  <TITLE>test</TITLE>
+</HEAD>
+<BODY>
+Hello, World!
+<ADDRESS>Neil Bowers</ADDRESS>
+</BODY>
+</HTML>
+#------------------------------------------------------------------------
+Netscape use of APPLET element
+-x Netscape
+####
+<HTML><HEAD><TITLE>test</TITLE></HEAD>
+<BODY>
+<APPLET ALIGN=CENTER
+        ALT="alternate text"
+        CODEBASE="StarField/"
+        CODE="stars.class"
+        WIDTH=400
+        HEIGHT=100
+        VSPACE=5
+        HSPACE=5
+        MAYSCRIPT
+        NAME=Bob
+>
+
+<PARAM NAME="numstars" VALUE="50">
+</APPLET>
+
+<APPLET ARCHIVE="archive.jar"
+        CODE="stars.class">
+<PARAM NAME="numstars" VALUE="50">
+</APPLET>
+
+</BODY>
+</HTML>
+#------------------------------------------------------------------------
+Netscape client-side image map with JavaScript attributes
+-x Netscape
+####
+<HTML><HEAD><TITLE>test</TITLE></HEAD><BODY>
+<MAP NAME="mainmap">
+          <AREA COORDS="0,0,65,24" HREF="/escapes/index.html">
+          <AREA SHAPE=circle COORDS="50,50,65,65" HREF="foo/" NAME=Bob>
+          <AREA SHAPE=rect COORDS="20,20,65,65" NOHREF TARGET="_top">
+          <AREA SHAPE=poly COORDS="20,20,65,65,30,65" HREF="bar/"
+                ONMOUSEOVER="over()" ONMOUSEOUT="out()">
+</MAP>
+</BODY></HTML>
+#------------------------------------------------------------------------
+The text style elements supported by Netscape 4
+-x Netscape
+####
+<HTML><HEAD><TITLE>test</TITLE></HEAD><BODY>
+    <B>      bold text        </B>
+    <BIG>    big text         </BIG>
+    <BLINK>  blinking text    </BLINK>
+    <I>      italic text      </I>
+    <KBD>    keyboard text    </KBD>
+    <CITE>   citation         </CITE>
+    <CODE>   code goes here   </CODE>
+    <EM>     emphasised text  </EM>
+    <S>      strikeout type   </S>
+    <SAMP>   sample text      </SAMP>
+    <SMALL>  small text       </SMALL>
+    <STRIKE> strikeout text   </STRIKE>
+    <STRONG> strong emphasis  </STRONG>
+    <SUB>    subscript text   </SUB>
+    <SUP>    superscript text </SUP>
+    <TT>     typewriter font  </TT>
+    <U>      underlined text  </U>
+    <BLOCKQUOTE>blockquoted text</BLOCKQUOTE>
+    <FONT FACE=Helvetica SIZE=4 COLOR=red>red helvetica text</FONT>
+</BODY></HTML>
+#------------------------------------------------------------------------
+Use of BASE element with just the HREF attribute
+<none>
+-x Netscape
+-x Microsoft
+####
+<HTML>
+<HEAD>
+    <TITLE>test</TITLE>
+    <BASE HREF="http://www.cre.canon.co.uk/~neilb/">
+</HEAD><BODY>
+<A HREF="weblint/">Weblint home page</A>
+</BODY></HTML>
+#------------------------------------------------------------------------
+BODY element with all Netscape attributes
+-x Netscape
+####
+<HTML>
+<HEAD>
+    <TITLE>test</TITLE>
+</HEAD>
+<BODY ALINK=red BACKGROUND="background.gif" BGCOLOR=white LINK=blue
+      TEXT=BLACK ONBLUR="blur()" ONFOCUS="focus()" ONLOAD="load()"
+      ONUNLOAD="unload()" VLINK="purple">
+Hello, World!
+</BODY></HTML>
+#------------------------------------------------------------------------
+EMBED element with Netscape enabled
+-x Netscape
+####
+<HTML><HEAD><TITLE>embed test</TITLE></HEAD>
+<BODY>
+<NOEMBED>
+This page requires a web browser which supports the EMBED element.
+</NOEMBED>
+<EMBED ALIGN=CENTER BORDER=1 FRAMEBORDER=NO HEIGHT=250 WIDTH=150
+       SRC="MyMovie.mov" CONTROLS=TRUE
+       HSPACE=5 VSPACE=5 PALETTE=FOREGROUND PLUGINSPAGE="plugins/"
+       TYPE="image/gif" HIDDEN=FALSE
+       >
+</BODY></HTML>
+#------------------------------------------------------------------------
+FORM with Netscape JavaScript extensions
+-x Netscape
+####
+<HTML><HEAD><TITLE>embed test</TITLE></HEAD>
+<BODY>
+<FORM ACTION="foo.pl" ENCTYPE="encoding" METHOD=GET NAME=Bob
+      ONRESET="reset()" ONSUBMIT="submit()" TARGET="_top">
+<INPUT TYPE=BUTTON NAME=button ONCLICK="click()">
+<INPUT TYPE=CHECKBOX NAME=box CHECKED ONCLICK="click()" VALUE="bob">
+<INPUT TYPE=FILE NAME=file VALUE="foo">
+<INPUT TYPE="hidden" NAME="password" VALUE="weblint">
+<INPUT TYPE=IMAGE ALIGN=LEFT NAME=image SRC="foo.gif">
+<INPUT TYPE=PASSWORD MAXLENGTH=16 NAME=password ONSELECT="select()"
+       SIZE=24 VALUE="bob">
+<INPUT TYPE=RADIO NAME=radio ONCLICK="click()" VALUE="bob" CHECKED>
+<INPUT TYPE=RESET NAME=reset ONCLICK="reset()" VALUE="Reset">
+<INPUT TYPE=SUBMIT NAME=submit VALUE=" Submit ">
+<INPUT TYPE=TEXT MAXLENGTH=64 NAME=title ONBLUR="blur()" ONCHANGE="change()"
+       ONFOCUS="focus()" ONSELECT="select()" SIZE=24 VALUE="">
+<KEYGEN NAME=halt CHALLENGE="who goes there?">
+<SELECT NAME=Name MULTIPLE ONBLUR="blur()" ONCHANGE="change()"
+        ONCLICK="click()" ONFOCUS="focus()" SIZE=2>
+    <OPTION VALUE="Bob" SELECTED>Bob
+    <OPTION VALUE="Fred">Fred
+</SELECT>
+<TEXTAREA COLS=50 NAME=textarea ONBLUR="blur()" ONCHANGE="change()"
+          ONFOCUS="focus()" ONSELECT="select()" ROWS=4 WRAP=HARD>
+    context of text area
+</TEXTAREA>
+</FORM>
+</BODY></HTML>
+#------------------------------------------------------------------------
+H1 through H6 with combinations of ALIGN attribute
+<none>
+-x Netscape
+-x Microsoft
+####
+<HTML><HEAD><TITLE>embed test</TITLE></HEAD>
+<BODY>
+<H1>Level 1 heading</H1>
+<H2 ALIGN=LEFT>level 2 heading</H2>
+<H3 ALIGN=CENTER>level 3</H3>
+<H4 ALIGN=CENTER>level 4</H4>
+<H5 ALIGN=CENTER>level 5</H5>
+<H6 ALIGN=CENTER>level 6</H6>
+</BODY></HTML>
+#------------------------------------------------------------------------
+HR with all attributes set
+<none>
+-x Netscape
+-x Microsoft
+####
+<HTML><HEAD><TITLE>embed test</TITLE></HEAD>
+<BODY>
+Hello
+<HR NOSHADE WIDTH="50%" SIZE=3 ALIGN=CENTER>
+World
+</BODY></HTML>
+#------------------------------------------------------------------------
+Netscape LAYERs
+-x Netscape
+####
+<HTML><HEAD><TITLE>embed test</TITLE></HEAD>
+<BODY>
+    <LAYER ID=layer1 TOP=50 LEFT=100>
+        <H1>Layer 1 heading</H1>
+        <P>Lots of content for this layer</P>
+        </LAYER>
+
+    <LAYER ID=layer2 TOP=100 LEFT=200>
+        <P>Content for layer 2</P>
+    </LAYER>
+
+    <LAYER ID=layer3 TOP=200 LEFT=260>
+        <H1>This heading is all there is in layer3</H1>
+    </LAYER>
+
+    <NOLAYER>
+        This page is written for a browser which supports
+        the LAYER element, such as Netscape.
+    </NOLAYER>
+</BODY></HTML>
+#------------------------------------------------------------------------
+Netscape example using LINK to link to an external stylesheet
+-x Netscape
+####
+<HTML>
+<HEAD>
+
+    <TITLE>A Good Title</TITLE>
+
+            <LINK REL=STYLESHEET TYPE="text/JavaScript"
+
+                HREF="http://style.com/mystyles1" TITLE="Cool">
+
+    </HEAD>
+<BODY>
+Hello, World!
+</BODY></HTML>
+#------------------------------------------------------------------------
+Netscape MULTICOL example
+-x Netscape
+####
+<HTML><HEAD><TITLE>foo</TITLE></HEAD>
+<BODY>
+<MULTICOL COLS=2 GUTTER=5 WIDTH="500">
+Blah blah blah.
+</MULTICOL>
+</BODY></HTML>
+#------------------------------------------------------------------------
+Use of the NOBR element with an explicit word break
+-x Netscape
+-x Microsoft
+####
+<HTML><HEAD><TITLE>foo</TITLE></HEAD>
+<BODY>
+<NOBR>This is a very long ling<WBR>which we don't want broken up.</NOBR>
+</BODY></HTML>
+#------------------------------------------------------------------------
+Use of the SERVER tag with Netscape's livewire
+-x Netscape
+####
+<HTML><HEAD><TITLE>foo</TITLE></HEAD>
+<BODY>
+<SERVER>
+
+   database.connect("INFORMIX", "blue", "ADMIN", "MANAGER", "mydb")
+
+</SERVER>
+</BODY></HTML>
+#------------------------------------------------------------------------
+Use of the SPACER element
+-x Netscape
+####
+<HTML><HEAD><TITLE>foo</TITLE></HEAD>
+<BODY>
+Hello
+<SPACER ALIGN=CENTER HEIGHT=100 SIZE=100 TYPE=VERTICAL WIDTH=100>
+World
+</BODY></HTML>
+#------------------------------------------------------------------------
+Use of STYLE and SPAN with Netscape
+-x Netscape
+####
+<HTML><HEAD><TITLE>foo</TITLE></HEAD>
+<BODY>
+    <STYLE TYPE="text/javascript">
+
+            classes.initDropCap.fontSize="12pt";
+
+            classes.initDropCap.lineHeight = "12pt";
+
+            classes.initDropCap.fontSize *= 2; // 200%
+
+            classes.initDropCap.align = "left";
+
+    </STYLE>
+
+    <P><SPAN class="initDropCap">T</SPAN>his is ...</P>
+</BODY></HTML>
+#------------------------------------------------------------------------
+Netscape TABLE example
+-x Netscape
+####
+<HTML><HEAD><TITLE>foo</TITLE></HEAD>
+<BODY>
+<TABLE ALIGN=LEFT BGCOLOR=white BORDER=1 CELLPADDING=5 CELLSPACING=5
+       HEIGHT=20 HSPACE=5 WIDTH="100%" VSPACE=5 COLS=2>
+<CAPTION ALIGN=CENTER>This is the caption</CAPTION>
+<TR ALIGN=CENTER BGCOLOR=white VALIGN=MIDDLE>
+    <TH ALIGN=RIGHT BGCOLOR=black COLSPAN=1 NOWRAP ROWSPAN=2 VALIGN=BOTTOM>
+        Hello</TH>
+    <TD ALIGN=LEFT BGCOLOR=red COLSPAN=1 NOWRAP>
+        World</TD>
+</TR>
+</TABLE>
+</BODY></HTML>
+#------------------------------------------------------------------------
+Microsoft Anchor (A) usage
+-x Microsoft
+####
+<HTML><HEAD><TITLE>foo</TITLE></HEAD>
+<BODY>
+<A ACCESSKEY="a" CLASS=thing DATAFLD=field DATASRC=foo HREF="foobar"
+   ID=Bob LANG=ja LANGUAGE=JAVASCRIPT METHODS=method NAME=bob
+   REL="stylesheet" REV="stylesheet" STYLE="foo" TARGET="_top"
+   TITLE="title" URN="boburn" ONBLUR="blur()" ONDBLCLICK="double()"
+   ONHELP="help()" ONKEYPRESS="key()" ONMOUSEDOWN="down()" ONMOUSEOUT="out()"
+   ONMOUSEUP="up()" ONCLICK="foo()" ONFOCUS="foo()" ONKEYDOWN="foo()"
+   ONKEYUP="foo()" ONMOUSEMOVE="move()" ONMOUSEOVER="over()"
+   ONSELECTSTART="start()">foo</A>
+</BODY></HTML>
+#------------------------------------------------------------------------
+OPTION can have an optional closing tag
+<none>
+-x Microsoft
+-x Netscape
+####
+<HTML><HEAD><TITLE>foo</TITLE></HEAD>
+<BODY>
+<FORM ACTION="foo.pl" METHOD=POST>
+<SELECT NAME=COLOR>
+<OPTION VALUE=red>Red
+<OPTION VALUE=green>Green</OPTION>
+<OPTION VALUE=blue>Blue</OPTION>
+</SELECT>
+</FORM>
+</BODY></HTML>
+#------------------------------------------------------------------------
+Should now get a warning if you have an empty OPTION in a SELECT
+<none>
+-x Microsoft
+-x Netscape
+####
+<HTML><HEAD><TITLE>foo</TITLE></HEAD>
+<BODY>
+<FORM ACTION="foo.pl" METHOD=POST>
+<SELECT NAME=COLOR>
+<OPTION VALUE=red>
+<OPTION VALUE=green>Green</OPTION>
+<OPTION VALUE=blue>Blue</OPTION>
+</SELECT>
+</FORM>
+</BODY></HTML>
+####
+5:empty-container
+#------------------------------------------------------------------------
diff -ruN /usr/ports/www/weblint/work/weblint-1.020/weblint /root/myports/www/weblint/work/weblint-1.020/weblint
--- /usr/ports/www/weblint/work/weblint-1.020/weblint	Wed Dec 31 19:00:00 1969
+++ /root/myports/www/weblint/work/weblint-1.020/weblint	Thu Sep  4 05:19:55 1997
@@ -0,0 +1,1873 @@
+: # use perl                                  -*- mode: Perl; -*-
+	eval 'exec perl -S $0 "$@"'
+		if $runnning_under_some_shell;
+
+#
+# weblint - pick fluff off WWW pages (html).
+#
+# Copyright (C) 1994, 1995, 1996, 1997 Neil Bowers.  All rights reserved.
+#
+# See README for additional blurb.
+# Bugs, comments, suggestions welcome: neilb@cre.canon.co.uk
+#
+# Latest version is available as:
+#	ftp://ftp.cre.canon.co.uk/pub/weblint/weblint.tar.gz
+#
+
+$VERSION        = '1.020';
+($PROGRAM       = $0) =~ s@.*/@@;
+@TMPDIR_OPTIONS	= ('/usr/tmp', '/tmp', '/var/tmp', '/temp');
+$TMPDIR         = &PickTmpdir(@TMPDIR_OPTIONS);
+$SITE_DIR       = '';
+$USER_RCFILE    = $ENV{'WEBLINTRC'} || "$ENV{'HOME'}/.weblintrc";
+$SITE_RCFILE	= $SITE_DIR.'/global.weblintrc' if $SITE_DIR;
+
+
+#------------------------------------------------------------------------
+# $version - the string which is displayed with -v or -version
+#------------------------------------------------------------------------
+$versionString=<<EofVersion;
+	This is weblint, version $VERSION
+
+	Copyright 1994,1995,1996,1997 Neil Bowers
+
+	Weblint may be used and copied only under the terms of the Artistic
+	License, which may be found in the Weblint source kit, or at:
+        	http://www.cre.canon.co.uk/~neilb/weblint/artistic.html
+EofVersion
+
+
+#------------------------------------------------------------------------
+# $usage - usage string displayed with the -U command-line switch
+#------------------------------------------------------------------------
+$usage=<<EofUsage;
+  $PROGRAM v$VERSION - pick fluff off web pages (HTML)
+      -d            : disable specified warnings (warnings separated by commas)
+      -e            : enable specified warnings (warnings separated by commas)
+      -f filename   : alternate configuration file
+      -stderr       : print warnings to STDERR rather than STDOUT
+      -i            : ignore case in element tags
+      -l            : ignore symlinks when recursing in a directory
+      -pedantic     : turn on all warnings, except for case of element tags
+      -s            : give short warning messages (filename not printed)
+      -t            : terse warning mode, useful mainly for testsuite
+      -todo         : print the todo list for $PROGRAM
+      -help | -U    : display this usage message
+      -urlget       : specify the command used to get a URL
+      -version | -v : display version
+      -warnings     : list supported warnings
+      -x <extn>     : HTML extension to use (supported: Microsoft, Netscape)
+
+  To check one or more HTML files, run weblint thusly:
+      weblint file1.html [... fileN.html]
+  If a file is in fact a directory, weblint will recurse, checking all files.
+
+  To include the Netscape extensions: weblint -x Netscape file.html
+EofUsage
+
+#------------------------------------------------------------------------
+# $todo - string displayed with the -todo switch
+#------------------------------------------------------------------------
+$todo=<<EofToDo;
+The Weblint toDo list can be seen at:
+	http://www.cre.canon.co.uk/~neilb/weblint/todo/
+EofToDo
+
+*WARNING = *STDOUT;
+
+# obsolete tags
+$obsoleteTags = 'PLAINTEXT|XMP|LISTING';
+
+$maybePaired  = 'LI|DT|DD|P|TD|TH|TR|OPTION';
+
+$pairElements = 'A|ADDRESS|APPLET|HTML|HEAD|BIG|BLOCKQUOTE|BODY|CAPTION|DIV|'.
+                'H1|H2|H3|H4|H5|H6|CENTER|FONT|MAP|FONT|'.
+		'B|I|U|TT|STRONG|EM|CODE|KBD|VAR|DFN|CITE|SAMP|'.
+		'UL|OL|DL|'.
+                'MENU|DIR|FORM|SCRIPT|'.
+                'SELECT|SMALL|STRIKE|STYLE|'.
+                'SUB|SUP|TABLE|TEXT|TEXTAREA|TITLE|CODE|PRE|'.
+                $maybePaired.'|'.
+                $obsoleteTags;
+
+# container elements which shouldn't have leading or trailing whitespace
+$cuddleContainers = 'A|H1|H2|H3|H4|H5|H6|TITLE|LI';
+
+# expect to see these tags only once
+%onceOnly = ('HTML', 1, 'HEAD', 1, 'BODY', 1, 'TITLE', 1);
+
+@fontElements = ('TT', 'I', 'B', 'U', 'STRIKE', 'BIG', 'SMALL', 'SUB', 'SUP',
+		 'EM', 'STRONG', 'DFN', 'CODE', 'SAMP', 'KBD', 'VAR', 'CITE');
+
+%physicalFontElements =
+(
+ 'B',  'STRONG',
+ 'I',  'EM',
+ 'TT', 'CODE, SAMP, KBD, or VAR'
+ );
+
+# expect these tags to have attributes
+# these are elements which have no required attributes, but we expect to
+# see at least one of the attributes
+$expectArgsRE = 'A|FONT';
+
+# these tags can only appear in the head element
+$headTagsRE = 'TITLE|NEXTID|LINK|BASE|META';
+
+%requiredContext =
+(
+ 'CAPTION',   'TABLE',
+ 'DD',        'DL',
+ 'DT',        'DL',
+ 'INPUT',     'FORM',
+ 'LI',        'DIR|MENU|OL|UL',
+ 'OPTION',    'SELECT',
+ 'SELECT',    'FORM',
+ 'TD',        'TR',
+ 'TEXTAREA',  'FORM',
+ 'TH',        'TR',
+ 'TR',        'TABLE',
+ 'PARAM',    'APPLET',
+ );
+
+# these tags are allowed to appear in the head element
+%okInHead = ('ISINDEX', 1, 'TITLE', 1, 'NEXTID', 1, 'LINK', 1,
+	     'BASE', 1, 'META', 1, 'RANGE', 1, 'STYLE', 1, '!--', 1);
+
+# expect to see these at least once.
+# html-outer covers the HTML element
+@expectedTags = ('HEAD', 'TITLE', 'BODY');
+
+# elements which cannot be nested
+$nonNest = 'A|FORM';
+
+# This table holds the valid attributes for elements
+# Where an element does not have an entry, this implies that the element
+# does not take any attributes
+%validAttributes =
+   (
+   'A',          'HREF|NAME|TITLE|REL|REV',
+   'ADDRESS',    0,
+   'APPLET',     'CODEBASE|CODE|ALT|NAME|WIDTH|HEIGHT|ALIGN|HSPACE|VSPACE',
+   'AREA',       'SHAPE|COORDS|HREF|NOHREF|ALT',
+   'BASE',       'HREF',
+   'BASEFONT',   'SIZE',
+   'BLOCKQUOTE', 0,
+   'BODY',       'BACKGROUND|BGCOLOR|TEXT|LINK|VLINK|ALINK',
+   'BR',         'CLEAR',
+   'CAPTION',    'ALIGN',
+   'CENTER',     0,
+   'DIV',        'ALIGN',
+   'DIR',        'COMPACT',
+   'DD',         0,
+   'DL',         'COMPACT',
+   'DT',         0,
+   'FONT',       'SIZE|COLOR',
+   'FORM',       'ACTION|METHOD|ENCTYPE',
+   'H1',         'ALIGN',
+   'H2',         'ALIGN',
+   'H3',         'ALIGN',
+   'H4',         'ALIGN',
+   'H5',         'ALIGN',
+   'H6',         'ALIGN',
+   'HEAD',       0,
+   'HR',         'ALIGN|NOSHADE|SIZE|WIDTH',
+   'HTML',       'VERSION',
+   'IMG',       'SRC|ALT|ALIGN|HEIGHT|WIDTH|BORDER|HSPACE|VSPACE|USEMAP|ISMAP',
+   'INPUT',      'TYPE|NAME|VALUE|CHECKED|SIZE|MAXLENGTH|SRC|ALIGN',
+   'ISINDEX',    'PROMPT',
+   'LI',         'TYPE|VALUE',
+   'LINK',       'HREF|REL|REV|TITLE',
+   'LISTING',    0,
+   'MAP',        'NAME',
+   'MENU',       'COMPACT',
+   'META',       'HTTP-EQUIV|NAME|CONTENT',
+   'OL',         'TYPE|START|COMPACT',
+   'OPTION',     'SELECTED|VALUE',
+   'P',          'ALIGN',
+   'PARAM',      'NAME|VALUE',
+   'PLAINTEXT',  0,
+   'PRE',        'WIDTH',
+   'SCRIPT',     'LANGUAGE|SRC',
+   'SELECT',     'NAME|SIZE|MULTIPLE',
+   'STYLE',      0,
+   'TABLE',      'ALIGN|WIDTH|BORDER|CELLSPACING|CELLPADDING',
+   'TD',         'NOWRAP|ROWSPAN|COLSPAN|ALIGN|VALIGN|WIDTH|HEIGHT',
+   'TEXTAREA',   'NAME|ROWS|COLS',
+   'TH',         'NOWRAP|ROWSPAN|COLSPAN|ALIGN|VALIGN|WIDTH|HEIGHT',
+   'TITLE',      0,
+   'TR',         'ALIGN|VALIGN',
+   'TT',         0,
+   'UL',         'TYPE|COMPACT',
+   'XMP',        0,
+   );
+
+foreach $elt (@fontElements)
+{
+   $validAttributes{$elt} = '';
+}
+
+%requiredAttributes =
+   (
+    'BASE',      'HREF',
+    'BASEFONT',  'SIZE',
+    'FORM',      'ACTION',
+    'IMG',       'SRC',
+    'LINK',      'HREF',
+    'NEXTID',    'N',
+    'SELECT',    'NAME',
+    'TEXTAREA',  'NAME|ROWS|COLS'
+   );
+
+$ColorNames = 'Black|White|Green|Maroon|Olive|Navy|Purple|Gray|'.
+            'Red|Yellow|Blue|Teal|Lime|Aqua|Fuchsia|Silver';
+
+$colorRE = '#[0-9a-fA-F]{6}'.'|'.$ColorNames;
+%attributeFormat =
+(
+ 'ALIGN',     'BOTTOM|MIDDLE|TOP|LEFT|CENTER|RIGHT|JUSTIFY|'.
+              'BLEEDLEFT|BLEEDRIGHT|DECIMAL',
+ 'CLEAR',    'LEFT|RIGHT|ALL|NONE',
+ 'COLS',      '\d+',
+ 'COLSPAN',   '\d+',
+ 'HEIGHT',    '\d+',
+ 'INDENT',    '\d+',
+ 'MAXLENGTH', '\d+',
+ 'METHOD',    'GET|POST',
+ 'ROWS',      '\d+',
+ 'ROWSPAN',   '\d+',
+ 'SEQNUM',    '\d+',
+ 'SIZE',      '[-+]?\d+|\d+,\d+',
+ 'SKIP',      '\d+',
+ 'TYPE',     'CHECKBOX|HIDDEN|IMAGE|PASSWORD|RADIO|RESET|SUBMIT|TEXT|'.
+             '[AaIi1]|disc|square|circle|FILE',
+ 'UNITS',     'PIXELS|EN',
+ 'VALIGN',    'TOP|MIDDLE|BOTTOM|BASELINE',
+ 'WIDTH',     '\d+%?',
+ 'WRAP',      'OFF|VIRTUAL|PHYSICAL',
+ 'X',         '\d+',
+ 'Y',         '\d+'
+);
+$attributeFormat{'ALINK'} = $attributeFormat{'VLINK'} =
+      $attributeFormat{'LINK'} = $attributeFormat{'TEXT'} =
+      $attributeFormat{'BGCOLOR'} = $attributeFormat{'COLOR'} = $colorRE;
+
+#-----------------------------------------------------------------------
+# Where an element appears in this hash, the value replaces that in
+# the validAttributes hash.
+#-----------------------------------------------------------------------
+%netscapeAttributes =
+(
+ 'A',        'HREF|NAME|TITLE|REL|REV|TARGET|ONCLICK|ONMOUSEOUT|ONMOUSEOVER',
+ 'APPLET',   'ALIGN|ALT|ARCHIVE|CODE|CODEBASE|HEIGHT|HSPACE|MAYSCRIPT|NAME|'.
+             'VSPACE|WIDTH',
+ 'AREA',     'COORDS|HREF|NAME|NOHREF|ONMOUSEOUT|ONMOUSEOVER|SHAPE|TARGET',
+ 'BASE',     'HREF|TARGET',
+ 'BODY',     'ALINK|BACKGROUND|BGCOLOR|LINK|TEXT|ONBLUR|ONFOCUS|ONLOAD|'.
+             'ONUNLOAD|VLINK',
+ 'BLINK',    '',
+ 'EMBED',    'ALIGN|BORDER|FRAMEBORDER|HEIGHT|HIDDEN|HSPACE|NAME|PALETTE|'.
+             'PLUGINSPAGE|SRC|TYPE|VSPACE|WIDTH|.+',
+ 'FONT',     'COLOR|SIZE|FACE',
+ 'FORM',     'ACTION|ENCTYPE|METHOD|NAME|ONRESET|ONSUBMIT|TARGET',
+ 'FRAME',    'BORDERCOLOR|FRAMEBORDER|MARGINHEIGHT|MARGINWIDTH|NAME|NORESIZE|'.
+             'SCROLLING|SRC',
+ 'FRAMESET', 'BORDER|BORDERCOLOR|COLS|FRAMEBORDER|ONBLUR|ONFOCUS|ONLOAD|'.
+             'ONUNLOAD|ROWS',
+ 'ILAYER',   'ID',
+ 'IMG',      'ALIGN|ALT|BORDER|HEIGHT|HSPACE|ISMAP|LOWSRC|NAME|ONABORT|'.
+             'ONERROR|ONLOAD|SRC|USEMAP|VSPACE|WIDTH',
+ 'INPUT',    'ALIGN|CHECKED|MAXLENGTH|NAME|ONBLUR|ONCHANGE|ONCLICK|ONFOCUS|'.
+             'ONSELECT|SIZE|SRC|TYPE|VALUE',
+ 'KEYGEN',   'NAME|CHALLENGE',
+ 'LAYER',    'ID|LEFT|TOP|PAGEX|PAGEY|SRC|Z-INDEX|ABOVE|BELOW|WIDTH|HEIGHT|'.
+             'CLIP|VISIBILITY|BGCOLOR|BACKGROUND|ONMOUSEOVER|ONFOCUS|ONLOAD',
+ 'LINK',     'HREF|REL|REV|TITLE|TYPE',
+ 'MULTICOL', 'COLS|GUTTER|WIDTH',
+ 'NOBR',     0,
+ 'NOEMBED',  0,
+ 'NOFRAMES', 0,
+ 'NOLAYER',  0,
+ 'NOSCRIPT', 0,
+ 'OL',       'TYPE|START|COMPACT',
+ 'S',        0,
+ 'SELECT',   'NAME|MULTIPLE|ONBLUR|ONCHANGE|ONCLICK|ONFOCUS|SIZE',
+ 'SERVER',   0,
+ 'SPACER',   'ALIGN|HEIGHT|SIZE|TYPE|WIDTH',
+ 'SPAN',     'STYLE|CLASS',
+ 'STYLE',    'TYPE',
+ 'TABLE',    'ALIGN|BGCOLOR|BORDER|CELLPADDING|CELLSPACING|COLS|HEIGHT|'.
+             'HSPACE|WIDTH|VSPACE',
+ 'TD',       'ALIGN|BGCOLOR|COLSPAN|NOWRAP|ROWSPAN|VALIGN|WIDTH|HEIGHT',
+ 'TEXTAREA', 'COLS|NAME|ONBLUR|ONCHANGE|ONFOCUS|ONSELECT|ROWS|WRAP',
+ 'TH',       'ALIGN|BGCOLOR|COLSPAN|NOWRAP|ROWSPAN|VALIGN|WIDTH|HEIGHT',
+ 'TR',       'ALIGN|VALIGN|BGCOLOR',
+ 'WBR',      0,
+);
+$netscapePaired = 'BLINK|FRAMESET|LAYER|MULTICOL|NOEMBED|NOFRAMES|NOLAYER|'.
+                  'NOBR|NOSCRIPT|S|SERVER|SPAN|STYLE';
+
+$msStdAttrs   = 'CLASS|ID|LANG|LANGUAGE|STYLE|TITLE';
+$msEvents     = 'ONCLICK|ONHELP|ONKEYPRESS|ONMOUSEMOVE|ONMOUSEOVER|'.
+                'ONSELECTSTART|ONDBLCLICK|ONKEYDOWN|ONKEYUP|ONMOUSEDOWN|'.
+                'ONMOUSEOUT|ONMOUSEUP';
+$msFullEvents = 'ONAFTERUPDATE|ONBEFOREUPDATE|ONBLUR|ONFOCUS|ONDRAGSTART|'.
+                'ONRESIZE|ONROWENTER|ONROWEXIT|'.$msEvents,
+$msTextAttrs  = $msStdAttrs.'|'.$msEvents;
+%msAttributes =
+(
+ 'A',          'ACCESSKEY|CLASS|DATAFLD|DATASRC|HREF|ID|LANG|LANGUAGE|'.
+               'METHODS|NAME|REL|REV|STYLE|TARGET|TITLE|URN|ONBLUR|'.
+               'ONFOCUS|'.$msEvents,
+ 'ADDRESS',    'CLASS|ID|LANG|LANGUAGE|STYLE|TITLE|'.$msEvents,
+ 'APPLET',     'ALIGN|ALT|CLASS|CODE|CODEBASE|DATAFLD|DATASRC|HEIGHT|HSPACE|'.
+               'ID|NAME|SRC|STYLE|TITLE|VSPACE|WIDTH',
+ 'AREA',       'ALT|CLASS|COORDS|HREF|ID|LANG|LANGUAGE|NOHREF|SHAPE|STYLE|'.
+               'TARGET|TITLE|ONBLUR|ONFOCUS|'.$msEvents,
+ 'B',          $msTextAttrs,
+ 'BASE',       'CLASS|HREF|ID|LANG|TARGET|TITLE',
+ 'BASEFONT',   'CLASS|COLOR|FACE|ID|LANG|SIZE|TITLE',
+ 'BGSOUND',    'BALANCE|CLASS|ID|LANG|LOOP|SRC|TITLE|VOLUME',
+ 'BIG',        $msTextAttrs,
+ 'BLOCKQUOTE', $msTextAttrs,
+ 'BODY',       'ACCESSKEY|ALINK|BACKGROUND|BGCOLOR|BGPROPERTIES|BOTTOMMARGIN|'.
+               'CLASS|ID|LANG|LANGUAGE|LEFTMARGIN|LINK|RIGHTMARGIN|SCROLL|'.
+               'STYLE|TEXT|TITLE|TOPMARGIN|VLINK|ONAFTERUPDATE|'.
+               'ONBEFOREUPDATE|ONBLUR|ONCLICK|ONDBLCLICK|ONDRAGSTART|'.
+               'ONFOCUS|ONHELP|ONKEYDOWN|ONKEYPRESS|ONKEYUP|ONMOUSEDOWN|'.
+               'ONMOUSEMOVE|ONMOUSEOUT|ONMOUSEOVER|ONMOUSEUP|ONRESIZE|'.
+               'ONROWENTER|ONROWEXIT|ONSCROLL|ONSELECTSTART',
+ 'BR',         'CLASS|CLEAR|ID|LANG|LANGUAGE|STYLE|TITLE',
+ 'BUTTON',     'ACCESSKEY|CLASS|DATAFLD|DATAFORMATAS|DATASRC|DISABLED|'.
+               'ID|LANG|LANGUAGE|STYLE|TITLE|TYPE|ONAFTERUPDATE|'.
+               'ONBEFOREUPDATE|ONBLUR|ONFOCUS|ONDRAGSTART|ONRESIZE|'.
+               'ONROWENTER|ONROWEXIT|'.$msEvents,
+ 'CAPTION',    'ALIGN|CLASS|ID|LANG|LANGUAGE|STYLE|TITLE|VALIGN|'.
+               'ONAFTERUPDATE|ONBEFOREUPDATE|ONBLUR|ONFOCUS|'.
+               'ONDRAGSTART|ONRESIZE|ONROWENTER|ONROWEXIT|'.$msEvents,
+ 'CENTER',     $msTextAttrs,
+ 'CITE',       $msTextAttrs,
+ 'CODE',       $msTextAttrs,
+ 'COL',        'ALIGN|CLASS|ID|SPAN|STYLE|TITLE|VALIGN|WIDTH',
+ 'COLGROUP',   'ALIGN|CLASS|ID|SPAN|STYLE|TITLE|VALIGN|WIDTH',
+ 'COMMENT',    'ID|LANG|TITLE',
+ 'DD',         $msTextAttrs,
+ 'DFN',        $msTextAttrs,
+ 'DIR',        $msTextAttrs,
+ 'DIV',        'ALIGN|CLASS|DATAFLD|DATAFORMATAS|DATASRC|ID|LANG|'.
+               'LANGUAGE|STYLE|TITLE|'.$msFullEvents,
+ 'DL',         $msTextAttrs,
+ 'DT',         $msTextAttrs,
+ 'EM',         $msTextAttrs,
+ 'EMBED',      'ALIGN|ALT|CLASS|CODE|CODEBASE|HEIGHT|HSPACE|ID|NAME|SRC|'.
+               'STYLE|TITLE|VSPACE|WIDTH',
+ 'FIELDSET',   $msTextAttrs,
+ 'FONT',       'CLASS|COLOR|FACE|ID|LANG|LANGUAGE|SIZE|STYLE|TITLE|'.
+               $msEvents,
+ 'FORM',       'ACTION|CLASS|ENCTYPE|ID|LANG|LANGUAGE|METHOD|NAME|STYLE|'.
+               'TARGET|TITLE|ONSUBMIT|'.$msEvents,
+ 'FRAME',      'BORDERCOLOR|CLASS|DATAFLD|DATASRC|FRAMEBORDER|HEIGHT|ID|'.
+               'LANG|LANGUAGE|MARGINHEIGHT|MARGINWIDTH|NAME|NORESIZE|'.
+               'SCROLLING|SRC|TITLE|WIDTH|ONREADYSTATECHANGE',
+ 'FRAMESET',   'BORDER|BORDERCOLOR|CLASS|COLS|FRAMEBORDER|FRAMESPACING|'.
+               'ID|LANG|LANGUAGE|ROWS|TITLE',
+ 'HEAD',       'CLASS|ID|TITLE',
+ 'H1',         'ALIGN|'.$msTextAttrs,
+ 'H2',         'ALIGN|'.$msTextAttrs,
+ 'H3',         'ALIGN|'.$msTextAttrs,
+ 'H4',         'ALIGN|'.$msTextAttrs,
+ 'H5',         'ALIGN|'.$msTextAttrs,
+ 'H6',         'ALIGN|'.$msTextAttrs,
+ 'HR',         'ALIGN|CLASS|COLOR|ID|LANG|LANGUAGE|NOSHADE|SIZE|SRC|STYLE|'.
+               'TITLE|WIDTH|'.$msFullEvents,
+ 'HTML',       'TITLE',
+ 'I',          $msTextAttrs,
+ 'IFRAME',     'ALIGN|BORDER|BORDERCOLOR|CLASS|DATAFLD|DATASRC|FRAMEBORDER|'.
+               'FRAMESPACING|HEIGHT|HSPACE|ID|LANG|LANGUAGE|MARGINHEIGHT|'.
+               'MARGINWIDTH|NAME|NORESIZE|SCROLLING|SRC|STYLE|TITLE|VSPACE|'.
+               'WIDTH|ONREADYSTATECHANGE',
+ 'IMG',        'ALIGN|ALT|BORDER|CLASS|DATAFLD|DATASRC|DYNSRC|HEIGHT|HSPACE|'.
+               'ID|ISMAP|LANG|LANGUAGE|LOOP|LOWSRC|NAME|SRC|STYLE|TITLE|'.
+               'USEMAP|VSPACE|WIDTH|ONABORT|'.$msFullEvents,
+ 'INPUT',      'ACCESSKEY|CHECKED|CLASS|DISABLED|ID|LANG|LANGUAGE|MAXLENGTH|'.
+               'NAME|READONLY|SIZE|SRC|STYLE|TABINDEX|TITLE|TYPE|VALUE|'.
+               $msFullEvents,
+ 'ISINDEX',    'ACTION|PROMPT|HREF',
+ 'KBD',        $msTextAttrs,
+ 'LABEL',      'ACCESSKEY|CLASS|DATAFLD|DATAFORMATAS|DATASRC|FOR|ID|LANG|'.
+               'LANGUAGE|STYLE|TITLE|'.$msEvents,
+ 'LI',         'CLASS|ID|LANG|LANGUAGE|STYLE|TITLE|TYPE|VALUE|'.$msEvents,
+ 'LINK',       'DISABLED|HREF|ID|REL|TITLE|TYPE',
+ 'LISTING',    $msTextAttrs,
+ 'MAP',        'CLASS|ID|LANG|NAME|STYLE|TITLE'.$msEvents,
+ 'MARQUEE',    'BEHAVIOR|BGCOLOR|CLASS|DATAFLD|DATAFORMATAS|DATASRC|'.
+               'DIRECTION|HEIGHT|HSPACE|ID|LANG|LANGUAGE|LOOP|'.
+               'SCROLLAMOUNT|SCROLLDELAY|STYLE|TITLE|TRUESPEED|VSPACE|WIDTH|'.
+               $msFullEvents,
+ 'MENU',       'CLASS|ID|LANG|STYLE|TITLE|'.$msEvents,
+ 'META',       'CONTENT|HTTP-EQUIV|NAME|TITLE|URL',
+ 'NEXTID',     'TITLE',
+ 'NOBR',       'ID|STYLE|TITLE',
+ 'NOFRAMES',   'ID|STYLE|TITLE',
+ 'NOSCRIPT',   '',
+ 'OBJECT',     'ACCESSKEY|ALIGN|CLASS|CLASSID|CODE|CODEBASE|CODETYPE|DATA|'.
+               'DATAFLD|DATASRC|HEIGHT|ID|LANG|LANGUAGE|NAME|STYLE|TABINDEX|'.
+               'TITLE|TYPE|WIDTH|'.$msFullEvents,
+ 'OL',         'CLASS|ID|LANG|LANGUAGE|START|STYLE|TITLE|TYPE|'.$msEvents,
+ 'OPTION',     'CLASS|ID|LANG|LANGUAGE|SELECTED|TITLE|VALUE|ONSELECTSTART',
+ 'P',          'ALIGN|'.$msTextAttrs,
+ 'PARAM',      'DATAFLD|DATAFORMATAS|DATASRC|NAME|VALUE',
+ 'PLAINTEXT',  $msTextAttrs,
+ 'PRE',        $msTextAttrs,
+ 'S',          $msTextAttrs,
+ 'SAMP',       $msTextAttrs,
+ 'SCRIPT',     'CLASS|EVENT|FOR|ID|LANGUAGE|SRC|TITLE',
+ 'SELECT',     'ACCESSKEY|ALIGN|CLASS|DATAFLD|DATASRC|DISABLED|ID|LANG|'.
+               'LANGUAGE|MULTIPLE|NAME|SIZE|STYLE|TABINDEX|TITLE|'.
+               $msFullEvents,
+ 'SMALL',      $msTextAttrs,
+ 'SPAN',       'CLASS|DATAFLD|DATAFORMATAS|DATASRC|ID|LANG|LANGUAGE|STYLE|'.
+               'TITLE|'.$msEvents,
+ 'STRIKE',     $msTextAttrs,
+ 'STRONG',     $msTextAttrs,
+ 'STYLE',      'DISABLED|TITLE|TYPE',
+ 'SUB',        $msTextAttrs,
+ 'SUP',        $msTextAttrs,
+ 'TABLE',      'ALIGN|BACKGROUND|BGCOLOR|BORDER|BORDERCOLOR|BORDERCOLORDARK|'.
+               'BORDERCOLORLIGHT|CELLPADDING|CELLSPACING|CLASS|COLS|'.
+               'DATAPAGESIZE|DATASRC|FRAME|HEIGHT|ID|LANG|LANGUAGE|RULES|'.
+               'STYLE|TITLE|WIDTH|'.$msFullEvents,
+ 'TBODY',      'ALIGN|BGCOLOR|CLASS|ID|LANG|LANGUAGE|STYLE|TITLE|VALIGN'.
+               $msEvents,
+ 'TD',         'ALIGN|BACKGROUND|BGCOLOR|BORDERCOLOR|BORDERCOLORDARK|'.
+               'BORDERCOLORLIGHT|CLASS|COLSPAN|ID|LANG|LANGUAGE|NOWRAP|'.
+               'ROWSPAN|STYLE|TITLE|VALIGN|'.$msFullEvents,
+ 'TEXTAREA',   'ACCESSKEY|ALIGN|CLASS|COLS|DATAFLD|DATASRC|DISABLED|'.
+               'ID|LANG|LANGUAGE|NAME|READONLY|ROWS|STYLE|TABINDEX|TITLE|'.
+               'WRAP|'.$msFullEvents,
+ 'TFOOT',      'ALIGN|BGCOLOR|CLASS|ID|LANG|LANGUAGE|STYLE|TITLE|VALIGN'.
+               $msEvents,
+ 'TH',         'ALIGN|BACKGROUND|BGCOLOR|BORDERCOLOR|BORDERCOLORDARK|'.
+               'BORDERCOLORLIGHT|CLASS|COLSPAN|ID|LANG|LANGUAGE|NOWRAP|'.
+               'ROWSPAN|STYLE|TITLE|VALIGN|'.$msFullEvents,
+ 'THEAD',      'ALIGN|BGCOLOR|CLASS|ID|LANG|LANGUAGE|STYLE|TITLE|VALIGN'.
+               $msEvents,
+ 'TITLE',      'ID|TITLE',
+ 'TR',         'ALIGN|BGCOLOR|BORDERCOLOR|BORDERCOLORLIGHT|'.
+               'BORDERCOLORDARK|CLASS|ID|LANG|LANGUAGE|STYLE|TITLE|VALIGN|'.
+               $msFullEvents,
+ 'TT',         $msTextAttrs,
+ 'U',          $msTextAttrs,
+ 'UL',         'CLASS|ID|LANG|LANGUAGE|STYLE|TITLE|TYPE|'.$msEvents,
+ 'VAR',        $msTextAttrs,
+ 'WBR',        'CLASS|ID|LANG|LANGUAGE|STYLE|TITLE',
+ 'XMP',        $msTextAttrs,
+);
+$msPaired   = 'BUTTON|COMMENT|COL|COLGROUP|FRAMESET|IFRAME|LABEL|LEGEND|'.
+	      'MARQUEE|NOBR|NOFRAMES|NOSCRIPT|OBJECT|SPAN|TBODY|'.
+	      'TFOOT|THEAD';
+
+%mustFollow =
+(
+ 'LH',         'UL|OL|DL',
+ 'OVERLAY',    'FIG',
+ 'HEAD',       'HTML',
+ 'BODY',       '/HEAD|NOFRAMES|/FRAMESET',
+ 'FRAMESET',   '/HEAD|/FRAME|/FRAMESET|/NOFRAMES|HTML',
+ '/HTML',      '/BODY|/FRAMESET|/NOFRAMES',
+ '/NOFRAMES',  '/BODY'
+ );
+
+%badTextContext =
+(
+ 'HEAD',  'BODY, or TITLE perhaps',
+ 'UL',    'LI or LH',
+ 'OL',    'LI or LH',
+ 'DL',    'DT or DD',
+ 'TABLE', 'TD or TH',
+ 'TR',    'TD or TH'
+);
+
+%variable =
+(
+ 'directory-index',		'index.html',
+ 'file-extensions',		'html, htm',
+ 'url-get',			'',
+ 'message-style',		'lint'
+);
+
+@options = ('d=s', 'e=s', 'f=s', 'stderr', 'help', 'i', 'l', 's', 't',
+	    'todo', 'U',
+	    'noglobals', 'pedantic', 'urlget=s', 'v', 'version', 'warnings',
+	    'x=s');
+# to suppress warnings with -w
+$opt_warnings = $opt_pedantic = $opt_help = $opt_todo = $opt_version =
+   $opt_i = $opt_t = $opt_u = $opt_v = $opt_noglobals = $opt_stderr = 0;
+$name = '';
+
+$exit_status = 0;
+
+require 'newgetopt.pl';
+require 'find.pl';
+
+die "$usage" unless @ARGV > 0;
+
+# escape the `-' command-line switch (for stdin), so NGetOpt don't mess wi' it
+grep(s/^-$/\tstdin\t/, @ARGV);
+
+&NGetOpt(@options) || die "use -help switch to display usage statement\n";
+
+# put back the `-' command-line switch, if it was there
+grep(s/^\tstdin\t$/-/, @ARGV);
+
+die "$versionString\n"	if $opt_v || $opt_version;
+die "$usage"		if $opt_U || $opt_help;
+
+&ReadDefaults();
+
+# Read configuration
+if ($opt_f)
+{
+   &ReadConfigFile($opt_f);
+}
+elsif (-f $USER_RCFILE)
+{
+   &ReadConfigFile($USER_RCFILE);
+}
+elsif (! $opt_noglobals && defined $SITE_RCFILE && -f $SITE_RCFILE)
+{
+   &ReadConfigFile($SITE_RCFILE);
+}
+
+# must do this after reading their config file to see a valid url-get
+&PrintToDo()		if $opt_todo;
+
+# pedantic command-line switch turns on all warnings except case checking
+if ($opt_pedantic)
+{
+   foreach $warning (keys %enabled)
+   {
+      &enableWarning($warning, 1);
+   }
+   &enableWarning('lower-case', 0);
+   &enableWarning('upper-case', 0);
+   &enableWarning('bad-link', 0);
+   &enableWarning('require-doctype', 0);
+}
+
+&AddExtension("\L$opt_x")             if $opt_x;
+$variable{'message-style'} = 'short'  if $opt_s;
+$variable{'message-style'} = 'terse'  if $opt_t;
+$variable{'url-get'} = $opt_urlget    if $opt_urlget;
+*WARNING = *STDERR                    if $opt_stderr;
+&ListWarnings()		              if $opt_warnings;
+
+($fileExtensions = $variable{'file-extensions'}) =~ s/,\s*/\|/g;
+
+# WARNING file handle is default
+select(WARNING);
+
+$opt_l = 1                 if $ignore{'SYMLINKS'};
+
+# -d to disable warnings
+if ($opt_d)
+{
+   for (split(/,/,$opt_d))
+   {
+      &enableWarning($_, 0);
+   }
+}
+
+# -e to enable warnings
+if ($opt_e)
+{
+   for (split(/,/,$opt_e))
+   {
+      &enableWarning($_, 1) || next;
+   }
+}
+
+# -i option to ignore case in element tags
+if ($opt_i)
+{
+   $enabled{'lower-case'} = $enabled{'upper-case'} = 0;
+}
+
+if (defined $variable{'directory-index'})
+{
+   @dirIndices = split(/\s*,\s*/, $variable{'directory-index'});
+}
+
+$argc = int(@ARGV);
+while (@ARGV > 0)
+{
+   $arg = shift(@ARGV);
+
+   &CheckURL($arg), next if $arg =~ m!^(http|gopher|ftp)://!;
+
+   &find($arg), next if -d $arg;
+
+   if ($opt_l && -l $arg && $argc == 1)
+   {
+      warn "$PROGRAM: $arg is a symlink, but I'll check it anyway\n";
+   }
+
+   &WebLint($arg), next if (-f $arg && -r $arg) || $arg eq '-';
+
+   print "$PROGRAM: could not read $arg: $!\n";
+}
+
+exit $exit_status;
+
+#========================================================================
+# Function:	WebLint
+# Purpose:	This is the high-level interface to the checker.  It takes
+#		a file and checks for fluff.
+#========================================================================
+sub WebLint
+{
+   local($filename,$relpath) = @_;
+   local(@tags) = ();
+   local($tagRE) = ('');
+   local(@taglines) = ();
+   local(@orphans) = ();
+   local(@orphanlines) = ();
+   local(%seenPage);
+   local(%seenTag);
+   local($lastTAG) = '';
+   local(%whined);
+   local(*PAGE);
+   local($line) = ('');
+   local($id, $ID);
+   local($tag, $tagNum);
+   local($closing);
+   local($tail);
+   local(%args);
+   local($arg);
+   local($rest);
+   local($lastNonTag);
+   local(@notSeen);
+   local($seenMailtoLink) = (0);
+   local($matched);
+   local($matchedLine);
+   local($novalue);
+   local($heading);
+   local($headingLine);
+   local($commentline);
+   local($_);
+
+
+   if ($filename eq '-')
+   {
+      *PAGE = *STDIN;
+      $filename = 'stdin';
+   }
+   else
+   {
+      return if defined $seenPage{$filename};
+      if (-d $filename)
+      {
+	 print "$PROGRAM: $filename is a directory.\n";
+	 $exit_status = 0;
+	 return;
+      }
+      $seenPage{$filename}++;
+      open(PAGE,"<$filename") || do
+      {
+	 print "$PROGRAM: could not read file $filename: $!\n";
+	 $exit_status = 0;
+	 return;
+      };
+      $filename = $relpath if defined $relpath;
+   }
+
+   undef $heading;
+   $tagNum = 0;
+
+ READLINE:
+   while (<PAGE>)
+   {
+      $line .= $_;
+      # $line =~ s/\n/ /g;
+
+      while ($line =~ /</o)
+      {
+	 $tail = $'; #'
+	 $lastNonTag = '';
+	 if ($` !~ /^\s*$/o)
+	 {
+	    $lastNonTag = $`;
+
+	    # check for illegal text context
+	    if (defined $badTextContext{$tags[$#tags]})
+	    {
+	       &whine($., 'bad-text-context',$tags[$#tags],
+		      $badTextContext{$tags[$#tags]});
+	    }
+
+	    $lnt = $lastNonTag;
+	    while ($lnt =~ />/o)
+	    {
+	       $nl = $lnt = $';
+	       $nl =~ s/[^\n]//go;
+	       if ('PRE' =~ /^($tagRE)$/)
+	       {
+		  &whine($. - length($nl), 'meta-in-pre', '&gt;', '>');
+	       }
+	       else
+	       {
+		  &whine($. - length($nl), 'literal-metacharacter', '>', '&gt;');
+	       }
+	    }
+	 }
+
+	 #--------------------------------------------------------
+	 #== SGML comment: <!-- ... blah blah ... -->
+	 #--------------------------------------------------------
+	 if ($tail =~ /^!--/o)
+	 {
+
+	    $commentline = $. unless defined $commentline;
+
+	    # push lastNonTag onto word list for spell checking
+
+	    $ct = $';
+	    next READLINE unless $ct =~ /--\s*>/o;
+
+	    undef $commentline;
+
+	    $comment = $`;
+	    $line = $';
+
+	    # markup embedded in comment can confuse some (most? :-) browsers
+	    &whine($., 'markup-in-comment') if $comment =~ /<\s*[^>]+>/o;
+	    next;
+	 }
+	 undef $commentline;
+
+	 next READLINE unless $tail =~ /^(\s*)([^>]*)>/o;
+
+
+	 &whine($., 'leading-whitespace', $2) if $1 ne '';
+
+         $line = $';
+         ($tag = $2) =~ s/\n/ /go;
+	 $id = $tag;
+
+         &whine($., 'unknown-element', $id),next if $id =~ /^\s*$/o;
+
+	 # push lastNonTag onto word list for spell checking
+
+         undef $tail;
+         undef $closing;
+
+         #-- <!DOCTYPE ... > is ignored for now.
+         $seenTag{'DOCTYPE'}=1,next if $id =~ /^!doctype/io;
+
+         if (!$whined{'require-doctype'} && !$seenTag{'DOCTYPE'})
+	 {
+            &whine($., 'require-doctype');
+            $whined{'require-doctype'} = 1;
+	 }
+
+	 $closing = 0;
+         if ($id =~ m@^/@o)
+         {
+            $id =~ s@^/@@o;
+	    $ID = "\U$id";
+            $closing = 1;
+         }
+
+	 &CheckAttributes();
+
+	 $TAG = ($closing ? '/' : '').$ID;
+	 if (defined $mustFollow{$TAG})
+	 {
+	    $ok = 0;
+	    foreach $pre (split(/\|/, $mustFollow{$TAG}))
+	    {
+	       ($ok=1),last if $pre eq $lastTAG;
+	    }
+	    if (!$ok || $lastNonTag !~ /^\s*$/o)
+	    {
+	       &whine($., 'must-follow', $TAG, $mustFollow{$TAG});
+	    }
+	 }
+
+	 #-- catch empty container elements
+	 if ($closing && $ID eq $lastTAG && $lastNonTag =~ /^\s*$/o
+	     && $tagNums[$#tagNums] == ($tagNum - 1)
+	     && $ID ne 'TEXTAREA' && $ID ne 'TD')
+	 {
+	    &whine($., 'empty-container', $ID);
+	 }
+
+	 #-- special case for empty optional container elements
+	 if (!$closing && @tags > 0 && $ID eq $tags[$#tags] && $lastTAG eq $ID
+	     && $ID =~ /^($maybePaired)$/
+	     && $tagNums[$#tagNums] == ($tagNum - 1)
+	     && $lastNonTag =~ /^\s*$/o
+	     && $ID ne 'COL' && $ID ne 'COLGROUP')
+	 {
+	    pop @tags; # pop off the tag, don't care what it is
+	    $tline = pop @taglines;
+	    pop @tagNums;
+	    &whine($tline, 'empty-container', $ID);
+	    $tagRE = join('|',@tags);
+	 }
+
+         #-- whine about unrecognized element, and do no more checks ----
+         if (!defined $validAttributes{$ID})
+	 {
+             if (defined $netscapeAttributes{$ID}
+                 || defined $msAttributes{$ID})
+             {
+                 &whine($., 'extension-markup', ($closing ? "/$id" : "$id"));
+             }
+             else
+             {
+                 &whine($., 'unknown-element', ($closing ? "/$id" : "$id"));
+             }
+             next;
+	 }
+
+         if ($closing == 0 && defined $requiredAttributes{$ID})
+         {
+	    foreach $attr (split(/\|/,$requiredAttributes{$ID}))
+	    {
+	       unless (defined $args{$attr})
+	       {
+		  &whine($., 'required-attribute', $attr, $id);
+	       }
+	    }
+         }
+         elsif ($closing == 0 && $id =~ /^($expectArgsRE)$/io)
+         {
+            &whine($., 'expected-attribute', $id) unless defined %args;
+         }
+
+         #--------------------------------------------------------
+         #== check case of tags
+         #--------------------------------------------------------
+         &whine($., 'upper-case', $id) if $id ne $ID;
+         &whine($., 'lower-case', $id) if $id ne "\L$id";
+
+
+         #--------------------------------------------------------
+         #== if tag id is /foo, then strip slash, and mark as a closer
+         #--------------------------------------------------------
+         if ($closing)
+         {
+	    if ($ID !~ /^($pairElements)$/o)
+	    {
+	       &whine($., 'illegal-closing', $id);
+	    }
+
+            if ($ID eq 'A' && $lastNonTag =~ /^\s*here\s*$/io)
+            {
+               &whine($., 'here-anchor');
+            }
+
+	    if ($ID eq 'TITLE' && length($lastNonTag) > 64)
+	    {
+	       &whine($., 'title-length');
+	    }
+
+	    #-- end of HEAD, did we see a TITLE in the HEAD element? ----
+	    &whine($., 'require-head') if $ID eq 'HEAD' && !$seenTag{'TITLE'};
+
+	    #-- was there a <LINK REV=MADE HREF="mailto:.."> element in HEAD?
+	    &whine($., 'mailto-link') if $ID eq 'HEAD' && $seenMailtoLink == 0;
+         }
+         else
+         {
+            #--------------------------------------------------------
+            # do context checks.  Should really be a state machine.
+            #--------------------------------------------------------
+
+	    if (defined $physicalFontElements{$ID})
+	    {
+	       &whine($., 'physical-font', $ID, $physicalFontElements{$ID});
+	    }
+
+	    if ($ID =~ /^H[1-6]$/o && 'A' =~ /^($tagRE)$/)
+	    {
+	       &whine($., 'heading-in-anchor', $ID);
+	    }
+
+            if ($ID eq 'A' && defined $args{'HREF'})
+            {
+	       $target = $args{'HREF'};
+               if ($target =~ /([^:]+):\/\/([^\/]+)(.*)$/o
+		   || $target =~ /^(news|mailto):/o
+		   || $target =~ /^\//o)
+               {
+               }
+               else
+               {
+		  $target =~ s/#.*$//o;
+		  if ($target !~ /^\s*$/o && ! -f $target && ! -d $target)
+		  {
+		     &whine($., 'bad-link', $target);
+		  }
+               }
+            }
+
+            if ($ID =~ /^H(\d)$/o)
+	    {
+               if (defined $heading && $1 - $heading > 1)
+               {
+	          &whine($., 'heading-order', $ID, $heading, $headingLine);
+               }
+               $heading     = $1;
+               $headingLine = $.;
+	    }
+
+	    #-- check for mailto: LINK ------------------------------
+	    if ($ID eq 'LINK' && defined $args{'REV'}
+                && defined $args{'HREF'}
+                && $args{'REV'} =~ /^made$/io
+		&& $args{'HREF'} =~ /^mailto:/io)
+	    {
+	       $seenMailtoLink = 1;
+	    }
+
+	    if (defined $onceOnly{$ID})
+	    {
+	       &whine($., 'once-only', $ID, $seenTag{$ID}) if $seenTag{$ID};
+	    }
+            $seenTag{$ID} = $.;
+
+            &whine($., 'body-no-head') if $ID eq 'BODY' && !$seenTag{'HEAD'};
+
+            if ($ID ne 'HTML' && $ID ne '!DOCTYPE' && !$seenTag{'HTML'}
+                && !$whined{'outer-html'})
+            {
+               &whine($., 'html-outer');
+               $whined{'outer-html'} = 1;
+            }
+
+	    #-- check for illegally nested elements ---------------------
+	    if ($ID =~ /^($nonNest)$/o && $ID =~ /^($tagRE)$/)
+	    {
+	       for ($i=$#tags; $tags[$i] ne $ID; --$i)
+	       {
+	       }
+	       &whine($., 'nested-element', $ID, $taglines[$i]);
+	    }
+
+            unless (defined $validAttributes{$ID})
+	    {
+	       &whine($., 'unknown-element', $ID);
+	    }
+
+	    #--------------------------------------------------------
+	    # check for tags which have a required context
+	    #--------------------------------------------------------
+	    if (defined $requiredContext{$ID})
+	    {
+	       $ok = 0;
+	       foreach $context (split(/\|/, $requiredContext{$ID}))
+	       {
+		  ($ok=1),last if $context =~ /^($tagRE)$/;
+	       }
+	       unless ($ok)
+	       {
+                  &whine($., 'required-context', $ID, $requiredContext{$ID});
+	       }
+	    }
+
+	    #--------------------------------------------------------
+	    # check for tags which can only appear in the HEAD element
+	    #--------------------------------------------------------
+	    if ($ID =~ /^($headTagsRE)$/o && 'HEAD' !~ /^($tagRE)$/)
+	    {
+               &whine($., 'head-element', $ID);
+	    }
+
+	    if (! defined $okInHead{$ID} && 'HEAD' =~ /^($tagRE)$/)
+	    {
+               &whine($., 'non-head-element', $ID);
+	    }
+
+	    #--------------------------------------------------------
+	    # check for tags which have been deprecated (now obsolete)
+	    #--------------------------------------------------------
+	    &whine($., 'obsolete', $ID) if $ID =~ /^($obsoleteTags)$/o;
+         }
+
+         #--------------------------------------------------------
+         #== was tag of type <TAG> ... </TAG>?
+         #== welcome to kludgeville, population seems to be on the increase!
+         #--------------------------------------------------------
+         if ($ID =~ /^($pairElements)$/o)
+         {
+	    if (!$closing && @tags > 0 && $ID eq $tags[$#tags] &&
+		$ID =~ /^($maybePaired)$/o)
+	    {
+	       pop @tags;
+	       pop @tagNums;
+	       pop @taglines;
+	       $tagRE = join('|',@tags);
+	    }
+	    if ($closing)
+	    {
+	       # trailing whitespace in content of container element
+	       if ($lastNonTag =~ /\S\s+$/o && $ID =~ /^($cuddleContainers)$/o)
+	       {
+		  &whine($., 'container-whitespace', 'trailing', $ID);
+	       }
+
+	       #-- if we have a closing tag, and the tag(s) on top of the stack
+	       #-- are optional closing tag elements, pop tag off the stack,
+	       #-- unless it matches the current closing tag
+	       if (@tags > 0 && $tags[$#tags] ne $ID
+		   && $tags[$#tags] =~ /^($maybePaired)$/o
+		   && $lastNonTag =~ /^\s*$/o
+		   && $tagNums[$#tagNums] == ($tagNum - 1)
+		   && $ID ne 'TD')
+	       {
+		  $tline = $taglines[$#taglines];
+		  &whine($tline, 'empty-container', $tags[$#tags]);
+	       }
+
+	       while (@tags > 0 && $tags[$#tags] ne $ID
+		      && $tags[$#tags] =~ /^($maybePaired)$/o)
+	       {
+		  pop @tags;
+		  pop @tagNums;
+		  pop @taglines;
+	       }
+	       $tagRE = join('|',@tags);
+	    }
+	    else
+	    {
+	       # leading whitespace in content of container element
+	       if ($line =~ /^\s+/o && $ID =~ /^($cuddleContainers)$/o)
+	       {
+		  &whine($., 'container-whitespace', 'leading', $ID);
+	       }
+	    }
+
+            if ($closing && $tags[$#tags] eq $ID)
+            {
+               &PopEndTag();
+            }
+            elsif ($closing && $tags[$#tags] ne $ID)
+            {
+	       #-- closing tag does not match opening tag on top of stack
+	       if ($ID =~ /^($tagRE)$/)
+	       {
+		  # If we saw </HTML>, </HEAD>, or </BODY>, then we try
+		  # and resolve anything inbetween on the tag stack
+		  if ($ID =~ /^(HTML|HEAD|BODY)$/o)
+		  {
+		     while ($tags[$#tags] ne $ID)
+		     {
+			$ttag = pop @tags;
+			pop @tagNums;
+			$ttagline = pop @taglines;
+			if ($ttag !~ /^($maybePaired)$/o)
+			{
+			   &whine($., 'unclosed-element', $ttag, $ttagline);
+			}
+
+			#-- does top of stack match top of orphans stack? --
+			while (@orphans > 0 && @tags > 0
+			       && $orphans[$#orphans] eq $tags[$#tags])
+			{
+			   pop @orphans;
+			   pop @orphanlines;
+			   pop @tags;
+			   pop @tagNums;
+			   pop @taglines;
+			}
+		     }
+
+		     #-- pop off the HTML, HEAD, or BODY tag ------------
+		     pop @tags;
+		     pop @tagNums;
+		     pop @taglines;
+		     $tagRE = join('|',@tags);
+		  }
+		  else
+		  {
+		     #-- matched opening tag lower down on stack
+		     push(@orphans, $ID);
+		     push(@orphanlines, $.);
+		  }
+	       }
+	       else
+	       {
+                  if ($ID =~ /^H[1-6]$/o && $tags[$#tags] =~ /^H[1-6]$/o)
+                  {
+		     &whine($., 'heading-mismatch', $tags[$#tags], $ID);
+                     &PopEndTag();
+                  }
+		  else
+		  {
+		     &whine($., 'mis-match', $ID);
+                  }
+	       }
+            }
+            else
+            {
+               push(@tags,$ID);
+               $tagRE = join('|',@tags);
+               push(@tagNums,$tagNum);
+               push(@taglines,$.);
+            }
+         }
+
+         #--------------------------------------------------------
+         #== inline images (IMG) should have an ALT argument :-)
+         #--------------------------------------------------------
+         &whine($., 'img-alt') if ($ID eq 'IMG'
+				   && !defined $args{'ALT'}
+				   && !$closing);
+
+         #--------------------------------------------------------
+         #== WIDTH & HEIGHT on inline images (IMG) can help browsers
+         #--------------------------------------------------------
+         &whine($., 'img-size') if ($ID eq 'IMG'
+				   && !defined $args{'WIDTH'}
+				   && !defined $args{'HEIGHT'}
+				   && !$closing);
+
+      } continue {
+	 ++$tagNum;
+         $lastTAG = $TAG;
+      }
+      $lastNonTag = $line;
+   }
+   close PAGE;
+
+   if (defined $commentline)
+   {
+      &whine($commentline, 'unclosed-comment');
+      return;
+   }
+
+   while (@tags > 0)
+   {
+      $tag = shift(@tags);
+      shift(@tagNums);
+      $line = shift(@taglines);
+      if ($tag !~ /^($maybePaired)$/o)
+      {
+	 &whine($., 'unclosed-element', $tag, $line);
+      }
+   }
+
+   for (@expectedTags)
+   {
+      # if we haven't seen TITLE but have seen HEAD
+      # then we'll have already whined about the lack of a TITLE element
+      next if $_ eq 'TITLE' && !$seenTag{$_} && $seenTag{'HEAD'};
+      next if $_ eq 'BODY' && $seenTag{'FRAMESET'};
+      push(@notSeen,$_) unless $seenTag{$_};
+   }
+   if (@notSeen > 0)
+   {
+      printf "%sexpected tag(s) not seen: @notSeen\n",
+		      ($opt_s ? "" : "$filename(-): ");
+      $exit_status = 1;
+   }
+}
+
+#========================================================================
+# Function:	CheckAttributes
+# Purpose:	If the tag has attributes, check them for validity.
+#========================================================================
+sub CheckAttributes
+{
+   undef %args;
+
+   if ($closing == 0 && $tag =~ m|^(\S+)\s+(.*)|)
+   {
+      ($id,$tail) = ($1,$2);
+      $ID = "\U$id";
+
+      # don't worry, or warn, about attributes of unknown elements
+      return unless defined $validAttributes{$ID};
+
+      $tail =~ s/\n/ /go;
+
+      # check for odd number of quote characters
+      ($quotes = $tail) =~ s/[^""]//go;
+      &whine($., 'odd-quotes', $tag) if length($quotes) % 2 == 1;
+
+      $novalue = 0;
+      $valid = $validAttributes{$ID};
+      while ($tail =~ /^\s*([^=\s]+)\s*=\s*(.*)$/o
+	     # catch attributes like ISMAP for IMG, with no arg
+	     || ($tail =~ /^\s*(\S+)(.*)/o && ($novalue = 1)))
+      {
+	 $arg = "\U$1";
+	 $rest = $2;
+
+	 &whine($., 'unexpected-open', $tag) if $arg =~ /</o;
+
+	 if (defined $validAttributes{$ID}
+             && $arg !~ /^($valid)$/i)
+	 {
+	    if (   (defined $netscapeAttributes{$ID}
+                    && $arg =~ /^($netscapeAttributes{$ID})$/i)
+                || (defined $msAttributes{$ID}
+                    && $arg =~ /^($msAttributes{$ID})$/i))
+	    {
+	       &whine($., 'extension-attribute', $arg, $id);
+	    }
+	    else
+	    {
+	       &whine($., 'unknown-attribute', $id, $arg);
+	    }
+	 }
+
+	 #-- catch repeated attributes.  for example:
+	 #--     <IMG SRC="foo.gif" SRC="bar.gif">
+	 if (defined $args{$arg})
+	 {
+	    &whine($., 'repeated-attribute', $arg, $id);
+	 }
+
+	 if ($novalue)
+	 {
+	    $args{$arg} = '';
+	    $tail = $rest;
+	 }
+	 elsif ($rest =~ /^'([^'']+)'(.*)$/o)
+         {
+	    &whine($., 'attribute-delimiter', $arg, $ID);
+            $args{$arg} = $1;
+            $tail = $2;
+         }
+	 elsif ($rest =~ /^"([^""]*)"(.*)$/o
+		|| $rest =~ /^'([^'']*)'(.*)$/o)
+         {
+            $args{$arg} = $1;
+            $tail = $2;
+         }
+	 elsif ($rest =~ /^(\S+)(.*)$/o)
+         {
+            $attrValue = $1;
+            $args{$arg} = $attrValue;
+            $tail = $2;
+            if ($attrValue =~ /[^-.A-Za-z0-9]/o)
+            {
+               &whine($., 'quote-attribute-value', $arg, $attrValue, $ID);
+            }
+         }
+         else
+         {
+	    $args{$arg} = $rest;
+	    $tail = '';
+         }
+	 $novalue = 0;
+      }
+      foreach $attr (keys %args)
+      {
+         if (defined $attributeFormat{$attr} &&
+             $args{$attr} !~ /^($attributeFormat{$attr})$/i)
+         {
+            &whine($., 'attribute-format', $attr, $id, $args{$attr});
+         }
+      }
+      &whine($., 'unexpected-open', $tag) if $tail =~ /</o;
+   }
+   else
+   {
+      if ($closing && $id =~ m|^(\S+)\s+(.*)|)
+      {
+	 &whine($., 'closing-attribute', $tag);
+	 $id = $1;
+      }
+      $ID = "\U$id";
+   }
+}
+
+#========================================================================
+# Function:	whine
+# Purpose:	Give a standard format whine:
+#			filename(line #): <message>
+#               The associative array `enabled' is used as a gating
+#               function, to suppress or enable each warning.  Every
+#               warning has an associated identifier, which is used to
+#               refer to the warning, and as the index into the hash.
+#========================================================================
+sub whine
+{
+   local($line, $id, @argv) = @_;
+   local($mstyle)	    = $variable{'message-style'};
+
+
+   return unless $enabled{$id};
+   @argv = @argv;
+   $exit_status = 1;
+   (print "$filename:$line:$id\n"), return             if $mstyle eq 'terse';
+   (eval "print \"\$filename($line): $message{$id}\n\""), return if $mstyle eq 'lint';
+   (eval "print \"line $line: $message{$id}\n\""), return if $mstyle eq 'short';
+
+   die "Unknown message style `$mstyle'\n";
+}
+
+#========================================================================
+# Function:	ReadConfigFile
+# Purpose:	Read the specified configuration file. This is used to
+#		the user's .weblintrc file, or the global system config
+#		file, if the user doesn't have one.
+#========================================================================
+sub ReadConfigFile
+{
+   local($filename) = @_;
+   local(*CONFIG);
+   local($arglist);
+   local($keyword, $value);
+   local($_);
+
+
+   open(CONFIG,"< $filename") || do
+   {
+      print WARNING "Unable to read config file `$filename': $!\n";
+      return;
+   };
+
+   while (<CONFIG>)
+   {
+      chop;
+      s/#.*$//;
+      next if /^\s*$/o;
+
+      #-- match keyword: process one or more argument -------------------
+      if (/^\s*(enable|disable|extension|ignore)\s+(.*)$/io)
+      {
+	 $keyword = "\U$1";
+	 $arglist = $2;
+	 while ($arglist =~ /^\s*(\S+)/o)
+	 {
+	    $value = "\L$1";
+
+	    &enableWarning($1, 1) if $keyword eq 'ENABLE';
+
+	    &enableWarning($1, 0) if $keyword eq 'DISABLE';
+
+	    $ignore{"\U$1"} = 1 if $keyword eq 'IGNORE';
+
+	    &AddExtension("\L$1") if $keyword eq 'EXTENSION';
+
+	    $arglist = $';
+	 }
+      }
+      elsif (/^\s*set\s+(\S+)\s*=\s*(.*)/o)
+      {
+         # setting a weblint variable
+         if (defined $variable{$1})
+         {
+            $variable{$1} = $2;
+         }
+         else
+         {
+            print WARNING "Unknown variable `$1' in configuration file\n";
+         }
+      }
+      elsif (/^\s*use\s*global\s*weblintrc/o)
+      {
+	 if (-f $SITE_RCFILE)
+	 {
+	    &ReadConfigFile($SITE_RCFILE);
+	 }
+	 else
+	 {
+	    print WARNING "$PROGRAM: unable to read global config file\n";
+	    next;
+	 }
+      }
+      else
+      {
+	 print WARNING ("$PROGRAM: ignoring unknown sequence (\"$_\") ".
+                       "in config file $filename\n");
+      }
+   }
+
+   close CONFIG;
+}
+
+#========================================================================
+# Function:	enableWarning
+# Purpose:	Takes a warning identifier and an integer (boolean)
+#		flag which specifies whether the warning should be
+#		enabled.
+#========================================================================
+sub enableWarning
+{
+   local($id, $enabled) = @_;
+
+
+   if (! defined $enabled{$id})
+   {
+      print WARNING "$PROGRAM: unknown warning identifier \"$id\"\n";
+      return 0;
+   }
+
+   $enabled{$id} = $enabled;
+
+   #
+   # ensure consistency: if you just enabled upper-case,
+   # then we should make sure that lower-case is disabled
+   #
+   $enabled{'lower-case'} = 0 if $id eq 'upper-case';
+   $enabled{'upper-case'} = 0 if $id eq 'lower-case';
+   $enabled{'upper-case'} = $enabled{'lower-case'} = 0 if $id eq 'mixed-case';
+
+   return 1;
+}
+
+#========================================================================
+# Function:	AddExtension
+# Purpose:	Extend the HTML understood.  Currently supported extensions:
+#			Netscape  - the netscape extensions proposed by
+#                                   Netscape Communications, Inc.  See:
+#			Microsoft - the extensions for Microsoft Internet
+#				    Explorer
+#               http://www.netscape.com/home/services_docs/html-extensions.html
+#========================================================================
+sub AddExtension
+{
+   local($extension) = @_;
+   local(@extlist);
+   local($element);
+
+   if ($extension =~ /,/o)
+   {
+      @extlist = split(/\s*,\s*/, $extension);
+      &AddExtension(shift @extlist) while @extlist > 0;
+      return;
+   }
+
+   if (   $extension ne 'netscape'
+       && $extension ne 'microsoft')
+   {
+      warn "$PROGRAM: unknown extension `$extension' -- ignoring.\n";
+      return;
+   }
+
+   #---------------------------------------------------------------------
+   # Microsoft extensions
+   #---------------------------------------------------------------------
+   if ($extension eq 'microsoft')
+   {      
+      #-- new element attributes for existing elements ---------------------
+      foreach $element (keys %msAttributes)
+      {
+          $validAttributes{$element} = $msAttributes{$element};
+      }
+
+      $pairElements  .= '|'.$msPaired;
+      $maybePaired   .= '|COL|COLGROUP';
+
+      $attributeFormat{'LOOP'} = '\d+|INFINITE';
+      $okInHead{'BGSOUND'} = 1;
+      $requiredAttributes{'BGSOUND'} = 'SRC';
+      $attributeFormat{'LEFTMARGIN'} = '\d+';
+      $attributeFormat{'TOPMARGIN'} = '\d+';
+
+      $requiredContext{'AREA'}  = 'MAP';
+      $requiredAttributes{'MAP'}   = 'NAME';
+      $requiredAttributes{'AREA'}  = 'COORDS';
+
+      #-- MARQUEE attributes
+      $attributeFormat{'BEHAVIOR'} = 'SCROLL|SLIDE|ALTERNATE';
+      $attributeFormat{'DIRECTION'} = 'LEFT|RIGHT';
+      $attributeFormat{'WIDTH'} = '\d+%?';
+      $attributeFormat{'HEIGHT'} = '\d+%?';
+
+      # attribute format check for attributes which take colors
+      $attributeFormat{'ALINK'} = $attributeFormat{'VLINK'} =
+      $attributeFormat{'LINK'} = $attributeFormat{'TEXT'} =
+      $attributeFormat{'BGCOLOR'} =
+      $attributeFormat{'COLOR'} = $attributeFormat{'BORDERCOLOR'} =
+      $attributeFormat{'BORDERCOLORLIGHT'} = $colorRE;
+
+      # LI TYPE= can take A, a, I, i, or 1
+      $attributeFormat{'TYPE'} .= '|[AaIi1]';
+
+      # the FRAME and RULES attributes for TABLE element
+      $attributeFormat{'FRAME'} = 'VOID|ABOVE|BELOW|HSIDES|LHS|RHS|VSIDES|'.
+	                           'BOX|BORDER';
+      $attributeFormat{'RULES'} = 'NONE|GROUPS|ROWS|COLS|ALL';
+
+      # START attribute for IMG element
+      $attributeFormat{'START'} = 'FILEOPEN|MOUSEOVER';
+
+      # VALUETYPE attribute for PARAM element (in an OBJECT)
+      $attributeFormat{'VALUETYPE'} = 'DATA|REF|OBJECT';
+
+      $requiredContext{'THEAD'} = 'TABLE';
+      $requiredContext{'TBODY'} = 'TABLE';
+      $requiredContext{'TFOOT'} = 'TABLE';
+      $requiredContext{'COLGROUP'} = 'TABLE';
+      $requiredContext{'COL'} = 'COLGROUP';
+      $requiredContext{'PARAM'} = 'APPLET|OBJECT';
+
+      # COMMENT, LISTING, PLAINTEXT, and XMP are valid elements for Microsoft
+      $obsoleteTags = '';
+   }
+
+   #---------------------------------------------------------------------
+   # Netscape extensions
+   #---------------------------------------------------------------------
+
+   if ($extension eq 'netscape')
+   {
+      #-- new element attributes for existing elements ---------------------
+      foreach $element (keys %netscapeAttributes)
+      {
+          $validAttributes{$element} = $netscapeAttributes{$element};
+      }
+
+      #-- formats for new attributes ---------------------------------------
+
+      $attributeFormat{'SIZE'} = '[-+]?\d+';
+      $attributeFormat{'MARGINWIDTH'} = '\d+';
+      $attributeFormat{'MARGINHEIGHT'} = '\d+';
+      $attributeFormat{'SCROLLING'} = 'NO|YES|AUTO';
+      $attributeFormat{'TYPE'} .= '|[AaIi1]|disc|square|circle';
+
+      #-- attributes for EMBED element
+      $attributeFormat{'TYPE'} .= '|.+';
+      $attributeFormat{'PALETTE'} = 'FOREGROUND|BACKGROUND';
+
+      #-- new elements -----------------------------------------------------
+
+      $pairElements  .= '|'.$netscapePaired;
+      $requiredContext{'AREA'}    = 'MAP';
+      $requiredContext{'FRAME'}   = 'FRAMESET';
+      $requiredContext{'KEYGEN'}  = 'FORM';
+      $requiredAttributes{'MAP'}  = 'NAME';
+      $requiredAttributes{'AREA'} = 'COORDS';
+
+      # this should really be specific to ROWS and COLS in FRAMESET element<
+      $attributeFormat{'ROWS'} =
+	 $attributeFormat{'COLS'} = '\d+|(\d*[*%]?,)*\s*\d*[*%]?';
+
+      # this is for TEXTAREA
+      $attributeFormat{'WRAP'} .= '|SOFT|HARD';
+
+      # attribute format check for attributes which take colors
+      $attributeFormat{'ALIGN'} .= '|TEXTTOP|ABSMIDDLE|BASELINE|ABSBOTTOM';
+
+      # BASE can take just a TARGET attribute, HREF not required therefore
+      delete $requiredAttributes{'BASE'};
+
+      $expectArgsRE .= '|FONT|BASE';
+
+      $okInHead{'SCRIPT'} = 1;
+   }
+}
+
+sub AddAttributes
+{
+   local($element,@attributes) = @_;
+   local($attr);
+
+
+   $attr = join('|', @attributes);
+   if (defined $validAttributes{$element})
+   {
+      $validAttributes{$element} .= "|$attr";
+   }
+   else
+   {
+      $validAttributes{$element} = "$attr";
+   }
+}
+
+#========================================================================
+# Function:	ListWarnings()
+# Purpose:	List all supported warnings, with identifier, and
+#		whether the warning is enabled.
+#========================================================================
+sub ListWarnings
+{
+   local($id);
+   local($message);
+
+
+   foreach $id (sort keys %enabled)
+   {
+      ($message = $message{$id}) =~ s/\$argv\[\d+\]/.../g;
+      $message =~ s/\\"/"/g;
+      print WARNING "$id (", ($enabled{$id} ? "enabled" : "disabled"), ")\n";
+      print WARNING "    $message\n\n";
+   }
+}
+
+sub CheckURL
+{
+   local($url)		= @_;
+   local($workfile)	= "$TMPDIR/$PROGRAM.$$";
+   local($urlget)	= $variable{'url-get'};
+
+
+   die "$PROGRAM: url-get variable is not defined -- ".
+       "don't know how to get $url\n" unless defined $urlget;
+
+   system("$urlget $url > $workfile");
+   &WebLint($workfile, $url);
+   unlink $workfile;
+}
+
+sub PrintToDo
+{
+   print STDERR "$todo";
+   exit 0;
+}
+
+#========================================================================
+# Function:	wanted
+# Purpose:	This is called by &find() to determine whether a file
+#               is wanted.  We're looking for files, with the filename
+#               extension .html or .htm.
+#========================================================================
+sub wanted
+{
+   local($foundIndex);
+
+   if (-d $_)
+   {
+      $foundIndex = 0;
+      foreach $legalIndex (@dirIndices)
+      {
+         $foundIndex=1,last if -f "$_/$legalIndex";
+      }
+      if (! $foundIndex)
+      {
+         &whine("$arg/$_", 'directory-index', "@dirIndices");
+      }
+   }
+
+   /\.($fileExtensions)$/o &&   # valid filename extensions: .html .htm
+      -f $_ &&			# only looking for files
+      (!$opt_l || !-l $_) &&	# ignore symlinks if -l given
+      &WebLint($_,$name);	# check the file
+}
+
+sub PopEndTag
+{
+   $matched     = pop @tags;
+   pop @tagNums;
+   $matchedLine = pop @taglines;
+
+   #-- does top of stack match top of orphans stack? --------
+   while (@orphans > 0 && @tags > 0
+	  && $orphans[$#orphans] eq $tags[$#tags])
+   {
+      &whine($., 'element-overlap', $orphans[$#orphans],
+	     $orphanlines[$#orphanlines], $matched, $matchedLine);
+      pop @orphans;
+      pop @orphanlines;
+      pop @tags;
+      pop @tagNums;
+      pop @taglines;
+   }
+   $tagRE = join('|',@tags);
+}
+
+#========================================================================
+# Function:	PickTmpdir
+# Purpose:	Pick a temporary working directory. If TMPDIR environment
+#		variable is set, then we try that first.
+#========================================================================
+sub PickTmpdir
+{
+   local(@options) = @_;
+   local($tmpdir);
+
+   @options = ($ENV{'TMPDIR'}, @options) if defined $ENV{'TMPDIR'};
+   foreach $tmpdir (@options)
+   {
+      return $tmpdir if -d $tmpdir && -w $tmpdir;
+   }
+   die "$PROGRAM: unable to find a temporary directory.\n",
+       ' ' x (length($PROGRAM)+2), "tried: ",join(' ',@options),"\n";
+}
+
+#========================================================================
+# Function:	ReadDefaults
+# Purpose:	Read the built-in defaults.  These are stored at the end
+#               of the script, after the __END__, and read from the
+#               DATA filehandle.
+#========================================================================
+sub ReadDefaults
+{
+   local(@elements);
+
+
+   while (<DATA>)
+   {
+      chop;
+      s/^\s*//;
+      next if /^$/;
+
+      push(@elements, $_);
+
+      next unless @elements == 3;
+
+      ($id, $default, $message) = @elements;
+      $enabled{$id} = ($default eq 'ENABLE');
+      ($message{$id} = $message) =~ s/"/\\"/g;
+      undef @elements;
+   }
+}
+
+__END__
+upper-case
+	DISABLE
+	tag <$argv[0]> is not in upper case.
+lower-case
+	DISABLE
+	tag <$argv[0]> is not in lower case.
+mixed-case
+	ENABLE
+	tag case is ignored
+here-anchor
+	ENABLE
+	bad form to use `here' as an anchor!
+require-head
+	ENABLE
+	no <TITLE> in HEAD element.
+once-only
+	ENABLE
+	tag <$argv[0]> should only appear once.  I saw one on line $argv[1]!
+body-no-head
+	ENABLE
+	<BODY> but no <HEAD>.
+html-outer
+	ENABLE
+	outer tags should be <HTML> .. </HTML>.
+head-element
+	ENABLE
+	<$argv[0]> can only appear in the HEAD element.
+non-head-element
+	ENABLE
+	<$argv[0]> cannot appear in the HEAD element.
+obsolete
+	ENABLE
+	<$argv[0]> is obsolete.
+mis-match
+	ENABLE
+	unmatched </$argv[0]> (no matching <$argv[0]> seen).
+img-alt
+	ENABLE
+	IMG does not have ALT text defined.
+nested-element
+	ENABLE
+	<$argv[0]> cannot be nested -- </$argv[0]> not yet seen for <$argv[0]> on line $argv[1].
+mailto-link
+	DISABLE
+	did not see <LINK REV=MADE HREF="mailto..."> in HEAD.
+element-overlap
+	ENABLE
+	</$argv[0]> on line $argv[1] seems to overlap <$argv[2]>, opened on line $argv[3].
+unclosed-element
+	ENABLE
+	no closing </$argv[0]> seen for <$argv[0]> on line $argv[1].
+markup-in-comment
+	ENABLE
+	markup embedded in a comment can confuse some browsers.
+unknown-attribute
+	ENABLE
+	unknown attribute "$argv[1]" for element <$argv[0]>.
+leading-whitespace
+	ENABLE
+	should not have whitespace between "<" and "$argv[0]>".
+required-attribute
+	ENABLE
+	the $argv[0] attribute is required for the <$argv[1]> element.
+unknown-element
+	ENABLE
+	unknown element <$argv[0]>.
+odd-quotes
+	ENABLE
+	odd number of quotes in element <$argv[0]>.
+heading-order
+	ENABLE
+	bad style - heading <$argv[0]> follows <H$argv[1]> on line $argv[2].
+bad-link
+	DISABLE
+	target for anchor "$argv[0]" not found.
+expected-attribute
+	ENABLE
+	expected an attribute for <$argv[0]>.
+unexpected-open
+	ENABLE
+	unexpected < in <$argv[0]> -- potentially unclosed element.
+required-context
+	ENABLE
+	illegal context for <$argv[0]> - must appear in <$argv[1]> element.
+unclosed-comment
+	ENABLE
+	unclosed comment (comment should be: <!-- ... -->).
+illegal-closing
+	ENABLE
+	element <$argv[0]> is not a container -- </$argv[0]> not legal.
+extension-markup
+	ENABLE
+	<$argv[0]> is extended markup (use "-x <extension>" to allow this).
+extension-attribute
+	ENABLE
+	attribute `$argv[0]' for <$argv[1]> is extended markup (use "-x <extension>" to allow this).
+physical-font
+	DISABLE
+	<$argv[0]> is physical font markup -- use logical (such as $argv[1]).
+repeated-attribute
+	ENABLE
+	attribute $argv[0] is repeated in element <$argv[1]>
+must-follow
+	ENABLE
+	<$argv[0]> must immediately follow <$argv[1]>
+empty-container
+	ENABLE
+	empty container element <$argv[0]>.
+directory-index
+	ENABLE
+	directory does not have an index file ($argv[0])
+closing-attribute
+	ENABLE
+	closing tag <$argv[0]> should not have any attributes specified.
+attribute-delimiter
+	ENABLE
+	use of ' for attribute value delimiter is not supported by all browsers (attribute $argv[0] of tag $argv[1])
+img-size
+	DISABLE
+	setting WIDTH and HEIGHT attributes on IMG tag can improve rendering performance on some browsers.
+container-whitespace
+	DISABLE
+	$argv[0] whitespace in content of container element $argv[1]
+require-doctype
+	DISABLE
+	first element was not DOCTYPE specification
+literal-metacharacter
+	ENABLE
+	metacharacter '$argv[0]' should be represented as '$argv[1]'
+heading-mismatch
+	ENABLE
+	malformed heading - open tag is <$argv[0]>, but closing is </$argv[1]>
+bad-text-context
+	ENABLE
+	illegal context, <$argv[0]>, for text; should be in $argv[1].
+attribute-format
+	ENABLE
+	illegal value for $argv[0] attribute of $argv[1] ($argv[2])
+quote-attribute-value
+	ENABLE
+	value for attribute $argv[0] ($argv[1]) of element $argv[2] should be quoted (i.e. $argv[0]="$argv[1]")
+meta-in-pre
+	ENABLE
+	you should use '$argv[0]' in place of '$argv[1]', even in a PRE element.
+heading-in-anchor
+	ENABLE
+	<A> should be inside <$argv[0]>, not <$argv[0]> inside <A>.
+title-length
+	ENABLE
+	The HTML spec. recommends the TITLE be no longer than 64 characters.
diff -ruN /usr/ports/www/weblint/work/weblint-1.020/weblint.1 /root/myports/www/weblint/work/weblint-1.020/weblint.1
--- /usr/ports/www/weblint/work/weblint-1.020/weblint.1	Wed Dec 31 19:00:00 1969
+++ /root/myports/www/weblint/work/weblint-1.020/weblint.1	Thu Sep  4 05:26:40 1997
@@ -0,0 +1,456 @@
+.ds wV 1.020
+.TH "weblint \*(wV" 1L "August 97" "Handmade"
+.de tS
+..
+.de tE
+..
+.de tI
+.TP
+\\fB\\$1\fP
+..
+.de iD
+.TP
+\fB\\$3\fP
+\fIIdentifier\fP: \\$1
+.br
+\fIDefault\fP: \\$2
+..
+.de wS
+.LP
+.TP
+..
+.de wE
+..
+.de lS
+.RS
+..
+.de lE
+.RE
+..
+.\" weblint command-line option macro
+.de wO
+[
+.B "\\$1 \fI\\$2\fP"
+.\".ie \\n(.c==2 .B "\\$1 \fI\\$2\fP"
+.\".el .B "\\$1"
+]
+..
+.de lI
+.TP 4
+.B \(bu
+\\$1
+..
+.SH NAME
+weblint \- pick fluff off web pages (HTML)
+.SH SYNOPSIS
+.B weblint
+.wO -d id
+.wO -e id
+.wO -f filename
+.wO -i
+.wO -l
+.wO -s
+.wO -stderr
+.wO -t
+.wO -todo
+.wO -help
+.wO -U
+.wO -urlget command
+.wO -v
+.wO -version
+.wO -warnings
+.wO -x extension
+file1 .. fileN
+.SH DESCRIPTION
+Weblint is a Perl script which picks fluff off HTML pages.
+Files to be checked are passed on the command-line:
+.RS
+.nf
+.ft CW
+
+% weblint foobar.html ./dodgy-files/ index.html
+
+.ft P
+.fi
+.RE
+If any of the arguments are directories weblint will recurse
+in the directory, and check any HTML files found.
+If an argument is a URL, then weblint will get the file
+using a URL retrieval program, and then check the file:
+.RS
+.nf
+.ft CW
+
+% weblint http://www.foobar.com/
+
+.ft P
+.fi
+.RE
+By default weblint will use lynx to retrieve URLs,
+but this can be over-ridden.
+A filename of `-' specifies that weblint should read from standard input:
+.RS
+.nf
+.ft CW
+
+% lynx -source http://www.foobar.com/ | weblint -
+
+.ft P
+.fi
+.RE
+Warnings are generated a la lint:
+.LP
+.RS
+.nf
+.ft CW
+home.html(9): unmatched </A> (no matching <A> seen).
+.ft P
+.fi
+.RE
+.TP
+Weblint includes the following features:
+.lS
+.lI "by default checks for HTML 3.2 (Wilbur)"
+.lI "46 different checks and warnings"
+.lI "Warnings can be enabled/disabled individually, as per your preference"
+.lI "basic structure and syntax checks"
+.lI "warnings for use of unknown elements and element attributes."
+.lI "context checks (where a tag must appear within a certain element)."
+.lI "overlapped or illegally nested elements."
+.lI "do IMG elements have ALT text?"
+.lI "flags obsolete elements."
+.lI "support for user and site configuration files"
+.lI "stylistic checks"
+.lI "checks for html which is not portable across all browsers"
+.lI "flags markup embedded in comments, since this can confuse some browsers"
+.lI "support for Netscape, and Microsoft HTML extensions"
+.lE
+.SH OPTIONS
+.tS
+.tI "-d \fIwarning-identifier\fP"
+Disable the warning associated with the identifier.
+Multiple identifiers can be specified,
+with a comma between identifiers.
+.tI "-e \fIwarning-identifier\fP"
+Enable the warning associated with the identifier.
+Multiple identifiers can be specified,
+with a comma between identifiers.
+.tI "-f \fIconfig-file\fP"
+Specify a weblint configuration file which should be used in place
+of the user's default config file, or the site configuration file.
+.tI -help
+Show a short usage summary.
+.tI "-i"
+Ignore case of element tags.
+.tI "-l"
+When recursing in directories,
+ignore any files which are symlinks (also known as soft links).
+This will also cause files on the command-line to be ignored if they
+are symlinks, unless only one file is given.
+.tI -pedantic
+Turn on all warnings except the case-sensitive and bad-link warnings.
+.tI -s
+Generate `short' warning messages,
+which do not include the filename.
+.tI "-stderr"
+Print warning messages to STDERR rather than STDOUT.
+.tI -t
+Enable terse warning mode,
+which is mainly useful for the weblint testsuite.
+.tI -U
+Same as -help.
+.tI "-urlget \fIcommand\fP"
+The command which should be used to retrieve HTML pages specified by URL.
+.tI -v
+Display the version number.
+.tI -version
+Display the version number.
+.tI -todo
+This prints out the URL for the online version of the weblint ToDo list.
+This includes known bugs, and requested/planned features.
+.tI -warnings
+List all supported warnings, with warning identifier,
+and whether the warning is enabled.
+.tI "-x \fIextension\fP"
+Include checks for the specified HTML extension;
+multiple extensions can be specified, separated with a comma.
+Currently the only extensions supported are \fINetscape\fP and \fIMicrosoft\fP.
+This can also be set in your weblint configuration file,
+described below.
+.tE
+.SH "HTML EXTENSIONS"
+Unless you specify otherwise, weblint assumes you are using HTML 3.2.
+Weblint supports the Netscape and Microsoft HTML extensions in addition.
+For example, weblint will complain that the BLINK
+element is not known,
+unless you enable the
+.B "Netscape"
+extension.
+The following extensions are currently supported:
+.tS
+.tI "Netscape"
+The HTML extensions supported by the Netscape browser, version 4.
+.tI "Microsoft"
+The HTML extensions supported by Microsoft Internet Explorer, version 4.
+.tE
+.LP
+To enable an extension, you can either use the \fB-x\fP command-line
+switch:
+.nf
+
+    \f(CW\s-2% weblint -x Netscape foobar.html\s+2\fP
+
+.fi
+Or you can use the \fBextension\fP keyword in your \fI.weblintrc\fP:
+.nf
+
+    \f(CW\s-2# enable the Microsoft extensions
+    extension Microsoft\s+2\fP
+
+.fi
+.SH "CONFIGURATION FILE"
+\fIWeblint\fP can be configured using a file \fI.weblintrc\fP 
+in your home directory (or a file referenced by the WEBLINTRC
+environment variable).
+This file can be used to enable or disable specific warnings,
+set weblint variables, and include HTML extensions,
+as described above.
+Each warning has a short identifier string, used to refer to
+the warning in config files, and from the command-line.
+For example, if you want to enable the check for tags in upper-case,
+but disable the check for obsolete elements,
+then you would include the following lines in your .weblintrc:
+.LP
+.RS
+.ft CW
+.ps -2
+.nf
+# specify the command used to retrieve URLs (-urlget switch)
+set url-get = lynx -source
+
+# the style of warning message to generate (lint, short, or terse)
+set message-style = lint
+
+# enable warning for tags not in upper-case
+enable upper-case
+
+# disable the warning for obsolete tags
+disable obsolete
+
+# enable the Netscape HTML extensions
+extension Netscape
+
+# when recursing in a directory,
+# ignore files which are symlinks (also known as soft links)
+ignore symlinks
+.fi
+.ps +2
+.ft P
+.RE
+.LP
+The keywords can be followed by any number of arguments,
+separated by spaces or tabs.
+Anything following a `#' is treated as a comment.
+.LP
+A sample configuration file is included in the weblint distribution
+(as of version 1.004),
+which mirrors the configuration built-in to weblint.
+.LP
+Weblint also supports a site configuration file.
+If a user does not have a personal configuration file,
+then weblint will check for a local site configuration file.
+To provide such a file,
+create a directory such as /usr/local/weblint,
+and create a file global.weblintrc.
+You need to edit the weblint script and modify the $SITE_DIR variable,
+which you will find near the top of the file.
+For example:
+.nf
+
+    \f(CW\s-2$SITE_DIR = '/usr/local/weblint';\s+2\fP
+
+.fi
+At some point in the future there will be configuration support for
+weblint, so you won't have to modify the script directly yourself.
+.LP
+If you have a site configuration file,
+then users can inherit the site defaults by adding the following line
+at the top of their .weblintrc file:
+.nf
+
+    \f(CW\s-2use global weblintrc\s+2\fP
+
+.fi
+.SH WARNINGS
+All warnings generated by \fIweblint\fP are listed below,
+along with the associated identifier,
+and whether the warning is enabled or disabled by default.
+.wS
+.iD upper-case disabled "tag <...> is not in upper case."
+.iD lower-case disabled "tag <...> is not in lower case."
+.iD required-attribute enabled "\f(BIfoo\fP attribute is required for <...>"
+.iD expected-attribute enabled "expected an attribute for <...>"
+.iD unknown-element enabled "unknown element <...>"
+.iD unknown-attribute enabled "unknown attribute `...' for element <...>."
+.iD leading-whitespace enabled "should not have whitespace between `<' and `...>'"
+.iD here-anchor enabled "bad form to use `here' as an anchor!"
+.iD require-head enabled "no <TITLE> in HEAD element."
+.iD once-only enabled "tag <...> should only appear once.  I saw one on line XX!"
+.iD body-no-head enabled "<BODY> but no <HEAD>."
+.iD html-outer enabled "outer tags should be <HTML> .. </HTML>."
+.iD head-element enabled "<...> can only appear in the HEAD element."
+.iD non-head-element enabled "<...> cannot appear in the HEAD element."
+.iD obsolete enabled "<...> is obsolete."
+.iD mis-match enabled "unmatched </...> (no matching <...> seen)."
+.iD img-alt enabled "IMG does not have ALT text defined."
+.iD nested-element enabled "<...> cannot be nested."
+.iD mailto-link disabled "Did not see <LINK REV=MADE HREF=mailto:...> in HEAD."
+.iD element-overlap enabled "</...> on line XX seems to overlap <...>, opened on line YY."
+.iD unclosed-element enabled "no closing </...> seen for <...> on line XX."
+.iD markup-in-comment enabled "markup embedded in a comment can confuse some browsers."
+.iD odd-quotes enabled "odd number of quotes in element <...>."
+.iD heading-order enabled "heading <H?> follows <H?> on line N."
+.iD bad-link disabled "target for anchor "..." not found."
+.iD unexpected-open enabled "unexpected < in <...> -- potentially unclosed element."
+.iD required-context enabled "illegal context for <...> - must appear in <...> element."
+.iD unclosed-comment enabled "unclosed comment (comment should be: <!-- ... -->"
+.iD illegal-closing enabled "element <...> is not a container -- </...> not legal."
+.iD physical-font disabled "<...> is physical font markup -- use logical (such as XXX)"
+.iD repeated-attribute enabled "attribute XYZ is repeated in element <...>"
+.iD empty-container enabled "empty container element <...>"
+.iD attribute-delimiter enabled "use of ' for attribute value delimiter is not supported by all browsers (attribute XYZ of tag ABC)"
+.iD closing-attribute enabled "closing tag <...> should not have any attributes specified."
+.iD directory-index enabled "directory DIR does not have an index file (index.html)"
+.iD must-follow enabled "<...> must immediately follow <...>"
+.iD img-size disabled "setting WIDTH and HEIGHT attributes on IMG tag can improve rendering performance on some browsers"
+.iD container-whitespace disabled "leading/trailing whitespace in content of container element ..."
+.iD require-doctype disabled "first element was not DOCTYPE specification"
+.iD literal-metacharacter enabled "`>' should be represented as `&gt;'"
+.iD heading-mismatch enabled "malformed heading - open tag is <H?>, but closing is </H?>"
+.iD bad-text-context enabled "illegal context, <...>, for text; should be in XXX."
+.iD attribute-format enabled "illegal value for AAA attribute of XXX (...)"
+.iD extension-markup enabled "<...> is extended markup (use '-x <extension>' to allow this)."
+.iD extension-attribute enabled "attribute `...' for <...> is extended markup (use '-x <extension>' to allow this)."
+.iD quote-attribute-value enabled "value for attribute XYZ (xyz-value) of element FOOBAR should be quoted (i.e. XYZ='xyz-value')"
+.iD meta-in-pre enabled "you should use '&gt;' in place of '>', even in a PRE element."
+.iD heading-in-anchor enabled "<A> should be inside <H?>, not <H?> inside <A>."
+.iD title-length enabled "The HTML spec. recommends the TITLE be no longer than 64 characters."
+.wE
+.SH ""
+.SH "TESTSUITE"
+A simple regression testsuite is included with weblint,
+in the Perl script \f(CW\s-2test.pl\s+2\fP.
+You can run the testsuite with either of the following commands:
+.nf
+    \f(CW\s-2% make test
+    % ./test.pl\s+2\fP
+.fi
+The results are printed to STDERR,
+with a more complete report generated in test.log.
+.LP
+All tests should pass.
+If any tests fail, please email test.log to the address given
+in the AUTHOR section below.
+.SH "ENVIRONMENT VARIABLES"
+.tS
+.tI "WEBLINTRC"
+If this variable is defined, and references a file,
+then \fIweblint\fP will read the referenced file for the user's configuration,
+rather than $HOME/.weblintrc.
+.tI "TMPDIR"
+The directory where weblint will create temporary working files.
+Defaults to /usr/tmp.
+.tE
+.SH FILES
+.tS
+.tI "$HOME/.weblintrc"
+The user's configuration file.  See the section `CONFIGURATION FILE'.
+.tE
+.SH "SEE ALSO"
+.BR perl(1)
+.SH VERSION
+This man page describes \fIweblint \*(wV\fP.
+.SH AVAILABILITY
+.ft CW
+.ps -2
+.nf
+ftp://ftp.cre.canon.co.uk/pub/weblint/weblint.tar.gz
+http://www.cre.canon.co.uk/~neilb/weblint/
+.fi
+.ft P
+.ps +2
+.SH "KNOWN BUGS"
+The list of known bugs can be found on the weblint home page:
+.nf
+
+    http://www.cre.canon.co.uk/~neilb/weblint/todo/
+
+.fi
+Certain versions of Perl have bugs which are triggered by weblint.
+You shouldn't experience problems if you have 4.036, or 5.002.
+.SH AUTHOR
+Neil Bowers, Canon Research Centre Europe
+.br
+neilb@cre.canon.co.uk
+.SH CONTRIBUTIONS
+Lots of people have contributed to weblint,
+in the form of suggestions, bug reports, fixes, and contributed code.
+Please email me if your name should appear in the roll call below.
+.LP
+Abigail <abigail@mars.ic.iaf.nl>;
+Anthony Thyssen <anthony@cit.gu.edu.au>;
+Axel Boldt <axel@uni-paderborn.de>;
+Barry Bakalor <barry@hal.com>;
+Bill Arnett <billa@netcom.com>;
+Bob Friesenhahn <bfriesen@simple.dallas.tx.us>;
+Mark Gates <mr-gates@uiuc.edu>;
+Bruce Speyer <bspeyer@texas-one.org>;
+Chris Siebenmann <cks@hawkwind.utcs.toronto.edu>;
+Clay Webster <clay@unipress.com>;
+Dana Jacobsen <dana@acm.org>;
+David Begley <david@bacall.nepean.uws.edu.au>;
+David J. MacKenzie <djm@va.pubnix.com>;
+Douglas Brick <dbrick@u.washington.edu>;
+Gil Citro;
+Eric de Mund <ead@ixian.com>;
+Richard Finegold <goldfndr@eskimo.com>;
+Joerg Heitkoetter <Joerg.Heitkoetter@germany.eu.net>;
+David Koblas <koblas@homepages.com>;
+John Labovitz <johnl@ora.com>;
+Eric Maryniak <E.Maryniak@rgd.nl>;
+John F. Whitehead <jfw@wral-tv.com>
+Juergen Schoenwaelder <schoenw@ibr.cs.tu-bs.de>;
+Frank Steinke <fsteinke@zeta.org.au>;
+Larry Virden <lvirden@cas.org>;
+Paul Black <black@lal.cs.byu.edu>;
+Doug Grinbergs <dougg@qualcomm.com>;
+Philip Hallstrom <philip@wolfe.net>;
+Craig Leres <leres@ee.lbl.gov>;
+Richard Lloyd <R.K.Lloyd@csc.liv.ac.uk>;
+Charles F. Randall <crandall@dmacc.cc.ia.us>;
+Robert Schmunk <pcrxs@nasagiss.giss.nasa.gov>;
+Jeff Schave <schave@engr.wisc.edu>;
+Jon Thackray <jrmt@uk.gdscorp.com>;
+Jens Thordarson <thordurh@rhi.hi.is>;
+Ryan Waldron <rew@nuance.com>;
+Thomas Leavitt <leavitt@webcom.com>;
+Tom Neff <tneff@panix.com>;
+Victor Parada <vparada@inf.utfsm.cl>;
+Erick Branderhorst <branderhorst@fgg.eur.nl>;
+Bryan O'Sullivan <bos@serpentine.com>;
+Alan J. Flavell <FLAVELL@v2.ph.gla.ac.uk>;
+Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>;
+Keith Iosso <a-keithi@microsoft.com>;
+Chris Lambert <lambertc@sharelink.com>;
+Tristan Savatier <tristan@creative.net>;
+Phil Hooper <hooper@bcci.eng.sun.com>;
+Gerald Viers <grviers@csupomona.edu>;
+Dean Brissinger <brissing@bvsd.k12.co.us>;
+Dave Schmitt <dschmi1@gl.umbc.edu>;
+John Van Essen <vanes002@maroon.tc.umn.edu>;
+Brandon Bell <brandon@arcs.bcit.bc.ca>;
+Fumio Moriya and Toshiaki Nomura <dsfrsoft@oai6.yk.fujitsu.co.jp>;
+Vincent Lefevre <vlefevre@ens-lyon.fr>;
+Jason Mathews <mathews@nssdc.gsfc.nasa.gov>;
+Lars Balker Rasmussen <lbr@mjolner.dk>;
+Richard L. Hawes <rhawes@dmapub.dma.org>.
diff -ruN /usr/ports/www/weblint/work/weblint-1.020/weblintrc /root/myports/www/weblint/work/weblint-1.020/weblintrc
--- /usr/ports/www/weblint/work/weblint-1.020/weblintrc	Wed Dec 31 19:00:00 1969
+++ /root/myports/www/weblint/work/weblint-1.020/weblintrc	Sat Aug 16 04:24:35 1997
@@ -0,0 +1,406 @@
+#
+# sample configuration file for weblint
+# distributed as part of weblint 1.020
+#
+# The settings in this file reflect the built-in defaults.
+# I.e. if a warning is enabled in this file, then it is enabled by
+# default, and you don't have to enable it in your .weblintrc.
+#
+
+#========================================================================
+#	Global Configuration File
+#========================================================================
+#
+# Weblint supports a local site configuration file.
+# If one is set up, then you can specify it be included with the following:
+#
+#	use global weblintrc
+#
+
+#========================================================================
+#	Weblint Variables
+#========================================================================
+
+#
+# message-style: style of warning message to generate
+#	lint	generate warnings similar to traditional lint:
+#			file(line #): warning
+#		this is the default
+#	short	don't include the filename in the warning message:
+#			line #: warning
+#	terse	a style which is easy for another program to parse:
+#			file:line #:warning-identifier
+
+set message-style = lint
+
+#
+# url-get: a program which can be used to retrieve a URL
+#
+
+set url-get = lynx -source
+
+#
+# directory-index: list of filenames for directory indices
+#
+# If your server supports multiple index file names:
+#	set directory-index = index.html, welcome.html
+#
+
+set directory-index = index.html
+
+#
+# file-extensions: list of filename extensions for valid HTML filenames
+#
+# A comma-separated list of filenames extensions; these are used when
+# recursing in a directory, to decide which files should be checked.
+#
+
+set file-extensions = html, htm
+
+#========================================================================
+#	Extensions
+#========================================================================
+
+#------------------------------------------------------------------------
+# Allow Netscape HTML extensions, such as CENTER and FONT
+#------------------------------------------------------------------------
+# uncomment following line to enable the Netscape extensions
+# extension Netscape
+
+#------------------------------------------------------------------------
+# Allow Microsoft HTML extensions, such as MARQUEE
+#------------------------------------------------------------------------
+# uncomment following line to enable the Microsoft extensions
+# extension Microsoft
+
+
+#========================================================================
+#	Weblint Warnings
+#========================================================================
+
+#------------------------------------------------------------------------
+# By default, when recursing in a directory, weblint will check files
+# which are symlinks.  Uncomment the following line if you want weblint
+# to skip symlinks.  This is equivalent to the -l command-line switch
+#------------------------------------------------------------------------
+# ignore symlinks
+
+#------------------------------------------------------------------------
+# There are two checks for the case of element tags:
+#	upper-case	all tags should be in upper case
+#	lower-case	all tags should be in lower case
+# If both are disabled, then case is ignored
+#------------------------------------------------------------------------
+disable upper-case lower-case
+
+#------------------------------------------------------------------------
+# Bad style to use `here' as anchor text
+#------------------------------------------------------------------------
+enable here-anchor
+
+#------------------------------------------------------------------------
+# Flag any elements which are not recognized.  This will catch mis-typed
+# elements (e.g. <TOTLE>, or <\BODY>).
+#------------------------------------------------------------------------
+enable unknown-element
+
+#------------------------------------------------------------------------
+# check element attributes to see if they are legal
+#------------------------------------------------------------------------
+enable unknown-attribute
+
+#------------------------------------------------------------------------
+# flag if no HEAD element in page
+#------------------------------------------------------------------------
+enable require-head
+
+#------------------------------------------------------------------------
+# Flag elements which should only appear once on a page (eg TITLE)
+#------------------------------------------------------------------------
+enable once-only
+
+#------------------------------------------------------------------------
+# Flag case where page has BODY element, but no HEAD defined
+#------------------------------------------------------------------------
+enable body-no-head
+
+#------------------------------------------------------------------------
+# If you want outer element to be <HTML>
+#------------------------------------------------------------------------
+enable html-outer
+
+#------------------------------------------------------------------------
+# Flag elements which are only allowed to appear in HEAD element
+#------------------------------------------------------------------------
+enable head-element
+
+#------------------------------------------------------------------------
+# Flag elements which aren't allowed to appear in HEAD element
+#------------------------------------------------------------------------
+enable non-head-element
+
+#------------------------------------------------------------------------
+# Flag obsolete elements, such as XMP and LISTING
+#------------------------------------------------------------------------
+enable obsolete
+
+#------------------------------------------------------------------------
+# Flag mis-matched begin and end tags;  for example:
+#	<H1> ... </H2>
+#------------------------------------------------------------------------
+enable mis-match
+
+#------------------------------------------------------------------------
+# Flag any IMG elements which don't have ALT text defined.
+#------------------------------------------------------------------------
+enable img-alt
+
+#------------------------------------------------------------------------
+# Flag illegally nested elements (such as anchors).
+#------------------------------------------------------------------------
+enable nested-element
+
+#------------------------------------------------------------------------
+# Check for those elements which have required context.
+# For example, the <CAPTION> element can only appear in <FIG> or <TABLE>
+#------------------------------------------------------------------------
+enable required-context
+
+#------------------------------------------------------------------------
+# Check for mailto: LINK in header;  for example:
+#	<LINK REV=MADE HREF="mailto:neilb@cre.canon.co.uk">
+# This lets at least lynx users comment on a page.
+#------------------------------------------------------------------------
+disable mailto-link
+
+#------------------------------------------------------------------------
+# Flag overlapped elements.  For example:
+#	<A HREF="..."> <B> text </A> </B>
+#------------------------------------------------------------------------
+enable element-overlap
+
+#------------------------------------------------------------------------
+# Generate a warning if closing tag is not seen for elements where
+# it is expected.  A common case is <A NAME="..."> ... </A>.
+#------------------------------------------------------------------------
+enable unclosed-element
+
+#------------------------------------------------------------------------
+# Generate a warning if markup appears inside a comment.  This can
+# confuse quite a few browsers, so it's not a good idea to do it.
+#------------------------------------------------------------------------
+enable markup-in-comment
+
+#------------------------------------------------------------------------
+# You are not allowed to have any whitespace between the opening
+# < and element name.
+#------------------------------------------------------------------------
+enable leading-whitespace
+
+#------------------------------------------------------------------------
+# Flag potentially unclosed tags:
+#	< ... < ... >
+#------------------------------------------------------------------------
+enable unexpected-open
+
+#------------------------------------------------------------------------
+# Elements which do not have any required attributes, but for which at
+# least one attribute is expected.  Anchors, for example.
+#------------------------------------------------------------------------
+enable expected-attribute
+
+#------------------------------------------------------------------------
+# Required element attributes.  Eg IMG tag must have SRC attribute.
+#------------------------------------------------------------------------
+enable required-attribute
+
+#------------------------------------------------------------------------
+# Currently just checks local links, to see if target file exists.
+# disabled at the moment, since it generates bogus warnings if the file
+# path included directories.
+#------------------------------------------------------------------------
+disable bad-link
+
+#------------------------------------------------------------------------
+# Check for headings which are more than 1 level deeper than previous.
+# Example: <H1> followed by <H3>
+#------------------------------------------------------------------------
+enable heading-order
+
+#------------------------------------------------------------------------
+# Check for odd number of double quotes in tag, to catch things like:
+#		<A HREF="url >
+#------------------------------------------------------------------------
+enable odd-quotes
+
+#------------------------------------------------------------------------
+# Warn about closing tag for elements which don't take a closing tag.
+# For example: <IMG SRC="foo.gif" ALT="alt text"></IMG>
+#------------------------------------------------------------------------
+enable illegal-closing
+
+#------------------------------------------------------------------------
+# Warn about unclosed comments.  For example:
+#	<!-- this comment is not correctly closed >
+# Legal SGML comments are:
+#	<!-- ... blah blah ... -->
+#------------------------------------------------------------------------
+enable unclosed-comment
+
+#------------------------------------------------------------------------
+# Warning for use of physical font markup, rather than logical
+# For example:
+#	<B> where you should use <STRONG>
+#	<I> where you should use <EM>
+#	<TT> where you should use <CODE>, <KBD>, <VAR>, or <SAMP>
+#------------------------------------------------------------------------
+disable physical-font
+
+#------------------------------------------------------------------------
+# Warning for repeated attributes within the same tag.  For example:
+#	<IMG SRC="foo.gif" SRC="bar.gif">
+#	<A NAME="fred" NAME="bloggs">
+#------------------------------------------------------------------------
+enable repeated-attribute
+
+#------------------------------------------------------------------------
+# Warn against use of ' as a delimiter for attribute values.  E.g.:
+#	<A HREF='http://www.cre.canon.co.uk/'>Canon Research Centre</A>
+#------------------------------------------------------------------------
+enable attribute-delimiter
+
+#------------------------------------------------------------------------
+# Warn about attributes on a closing tag of container element.  E.g.:
+#	<A HREF="foobar.html">click here!</A NAME="foobar">
+#------------------------------------------------------------------------
+enable closing-attribute
+
+#------------------------------------------------------------------------
+# When recursing in a directory, check whether there is a directory
+# index file.  See also the variable `directory-index', which specifies
+# the name of index file to look for.
+#------------------------------------------------------------------------
+enable directory-index
+
+#------------------------------------------------------------------------
+# Warn about empty container elements.  For example:
+#	<TITLE></TITLE>
+#------------------------------------------------------------------------
+enable empty-container
+
+#------------------------------------------------------------------------
+# Warn about situations where one element is expected to immediately
+# follow another, with no tags or text between. For example:
+#	1) LH should be the first thing in a UL, if it appears at all
+#	2) should be nothing between </HEAD> and <BODY>
+#------------------------------------------------------------------------
+enable must-follow
+
+#------------------------------------------------------------------------
+# Warn about IMG elements which don't have the WIDTH and HEIGHT
+# attributes set. Setting these attributes can improve page layout speed
+# on some browsers.
+#------------------------------------------------------------------------
+disable img-size
+
+#------------------------------------------------------------------------
+# Warn about leading or trailing whitespace for certain container
+# elements: A, TITLE, H1 through H6.
+#------------------------------------------------------------------------
+disable container-whitespace
+
+#------------------------------------------------------------------------
+# Warn if you don't have a DOCTYPE element as the first thing in
+# your document.
+#------------------------------------------------------------------------
+disable require-doctype
+
+#------------------------------------------------------------------------
+# Warn if you a metacharacter is included literally, rather than using
+# the appropriate entity. Currently this just warns about use of >,
+# in which case you should use &gt;
+#------------------------------------------------------------------------
+enable literal-metacharacter
+
+# ========================================================================
+# Warnings added in the 1.014 release
+# ========================================================================
+
+#------------------------------------------------------------------------
+# Warn if a heading is closed with a different level close tag than
+# the heading was opened with. For example:
+#	<H2>... blah blah ...</H1>
+#------------------------------------------------------------------------
+enable heading-mismatch
+
+#------------------------------------------------------------------------
+# Warn if text is seen in unexpected context, such as inside a UL element
+# (rather than inside an LI, which is inside a UL. Or in the HEAD element.
+#------------------------------------------------------------------------
+enable bad-text-context
+
+#------------------------------------------------------------------------
+# Warn about illegal attribute values, such as values in the wrong format.
+#------------------------------------------------------------------------
+enable attribute-format
+
+# ========================================================================
+# Warnings added in the 1.015 release  
+#       NOTE: the netscape-markup and netscape-attribute warnings
+#               were deleted with the 1.015 release
+# ========================================================================
+
+# uncomment the following line if using the Microsoft HTML extensions
+# extension Microsoft
+
+#------------------------------------------------------------------------
+# Warn if using extended markup without an appropriate extension enabled.
+# This warning replaces the 'netscape-markup' warning, and is now generated
+# if the page uses Netscape or Microsoft extensions.
+#------------------------------------------------------------------------
+enable extension-markup
+ 
+#------------------------------------------------------------------------
+# Warn if using extended attributes without an appropriate extension enabled.
+# This warning replaces the 'netscape-attribute' warning, and is now generated
+# if the page uses Netscape or Microsoft attributes.
+#------------------------------------------------------------------------
+enable extension-attribute
+
+
+# ========================================================================
+# New stuff in the 1.016 release
+# ========================================================================
+
+#------------------------------------------------------------------------
+# Warn of the document TITLE is longer than 64 characters.
+# This limit is recommended by the HTML specification
+#------------------------------------------------------------------------
+enable title-length
+
+#------------------------------------------------------------------------
+# Warn about a heading inside an anchor. Should be the other way round;
+# i.e. an anchor inside a heading.
+#------------------------------------------------------------------------
+enable heading-in-anchor
+
+#------------------------------------------------------------------------
+# Warn about use of < inside the PRE element. This is just a special
+# case of the `literal-metacharacter' warning.
+#------------------------------------------------------------------------
+enable meta-in-pre
+
+#------------------------------------------------------------------------
+# Warn about attribute values which should be quoted, but aren't.
+# Attribute values should be quoted if they contain characters
+# other than [-.A-Za-z0-9]
+#------------------------------------------------------------------------
+enable quote-attribute-value
+
+
+# ========================================================================
+# New stuff in the 1.020 release
+# ========================================================================
+
+#-- no new warnings or variables added in 1.020
+
>How-To-Repeat:
>Fix:
>Release-Note:
>Audit-Trail:
State-Changed-From-To: open->closed 
State-Changed-By: max 
State-Changed-When: Wed Oct 29 09:10:50 PST 1997 
State-Changed-Why:  
The port is updated. 
When you submmit update to ports next time, please: 

1. Remove the package file (*.tgz) and the work directory before diff'ing. 

2. Don't include the CVS directory. 

3. Never change the $Id$ line. 

4. Don't change the Whom: line and the Date created: line. 

Also, in your patch, you changed the maintainer, though, have you and 
the former maintainer (pst@freebsd.org) reached an agreement that you 
are taking over this port?  For now, I left the maintainer unchanged, 
but if you two have agreed to change the maintainer, please let me know 
and I'll update it ASAP. 
>Unformatted:

