#!/usr/bin/ruby require 'rubygems' require 'cgi-spa' require 'htmlentities' # http://www.quotationspage.com/quote/692.html source = File.join(File.dirname(__FILE__),'validator-output') data=open("#{source}/index.html?doc=http:%2F%2F#{$param.site}%2F").read notes=data.scan(/
windows-1252 instead of the declared encoding},
:code => :encoding_warning, :weight => 0
rule %r{Changing character encoding utf-8 and reparsing},
:code => :encoding_warning, :weight => 0
rule %r{Bad value \d+\.\d+ for attribute content on element .*meta},
%r{Bad value \d+;url=.* for attribute content on element .*meta},
:code => :meta_refresh, :weight => 10
rule %r{Obsolete doctype\.},
%r{Legacy doctype\.},
%r{Quirky doctype\.},
%r{skipping entity: \[dtd\]},
%r{Almost standards mode doctype\.},
:code => :versioned_doctype, :weight => 15
rule %r{Self-closing syntax \(/\>\) used on a non-void HTML element},
:code => :self_closing_where_closing_is_optional, :weight => 16
rule %r{Start tag seen without seeing a doctype first\.},
:code => :missing_doctype, :weight => 19
rule %r{not allowed as child of element .* :span_semantics, :weight => 20
rule %r{End of file seen and there were open elements},
:code => :optional, :weight => 25
rule %r{[Cc]onsecutive hyphens},
%r{trailing hyphen in a comment},
:code => :consecutive_hyphens, :weight => 28
rule %r{= in an unquoted attribute value},
%r{No space between the doctype public and system identifiers},
:code => :unquoted_equals, :weight => 28
rule %r{No space between attributes},
:code => :no_space, :weight => 29
rule %r{Attribute y-},
%r{Attribute _sp},
:code => :extensibility_prefix, :weight=>35
rule %r{Attribute xmlns:.* not allowed here},
%r{local name xmlns:.* is not serializable as XML 1.0},
:code => :extensibility_xmlns, :weight=>36
rule %r{Bad value .* for attribute http-equiv},
:code => :extensibility_meta, :weight=>38
rule %r{Element .*script<.* not allowed as child of element <},
%r{Stray script start tag},
:code => :script_anywhere, :weight=>39
rule %r{unnamed script},
:code => :unnamed_script, :weight=>40
rule %r{Presentational_elements_and_attributes},
:code => :css, :weight => 45
rule %r{Required attributes missing on element .*link},
%r{Required attributes missing on element .*area},
%r{Required attributes missing on element .*style},
%r{Required attributes missing on element .*script},
:code => :optional_attrs, :weight => 46
rule %r{center},
:code => :css, :weight => 45
rule %r{attribute on the .* element is obsolete},
%r{The Content-Language state is obsolete},
%r{The .* attribute is obsolete},
%r{The .* element is obsolete},
:code => :versioned, :weight => 45
# http://www.aptana.com/reference/html/api/HTML.field.vspace.html
rule %r{Attribute border not allowed on element},
%r{Attribute color not allowed on element .*hr<},
%r{Attribute background not allowed on element},
%r{Attribute hspace not allowed on element},
%r{Attribute vspace not allowed on element},
%r{Attribute height not allowed on element},
:code => :versioned, :weight => 45
# http://www.aptana.com/reference/html/api/HTML.field.allowtransparency.html
rule %r{Attribute allowtransparency not allowed on element},
:code => :browser_specific_markup, :weight => 45
rule %r{Attribute marginheight not allowed on element},
%r{Attribute leftmargin not allowed on element},
%r{Attribute marginwidth not allowed on element},
%r{Attribute topmargin not allowed on element},
%r{Attribute width not allowed on element},
:code => :nonstd_attribute, :weight => 46
# http://msdn.microsoft.com/en-us/library/ms533486(VS.85).aspx
# https://developer.mozilla.org/en/How_to_Turn_Off_Form_Autocompletion
rule %r{Attribute autocomplete not allowed on element},
:code => :nonnstd_element, :weight=>49
rule %r{nobr},
:code => :nonstd_element, :weight => 49
rule %r{& did not start a character reference},
:code => :escape, :weight => 55
rule %r{No .* element in list scope but a .* end tag seen},
%r{Stray end tag },
%r{No element font to close},
%r{No element a to close},
%r{violates nesting rules},
%r{End tag .* seen but there were unclosed elements},
%r{End tag for .* seen, but there were unclosed elements},
:code => :unmatched_close, :weight => 65
rule %r{A table row was \d+ columns wide, which is less than the column count established by the first row},
%r{A table row was \d+ columns wide and exceeded the column count established by the first row},
%r{Table column \d+ .* has no cells beginning in it},
:code => :table_width, :weight => 71
rule %r{COMPATIBILITY_CHARACTER in PATH\.},
:code => :compat_char, :weight => 74
rule %r{The character encoding .* is not widely supported},
%r{Using gbk instead of the declared encoding},
:code => :char_encoding, :weight => 73
rule %r{Bad value +http:.*? for attribute href},
%r{Bad value +http:.*? for attribute src},
%r{href on element .*a<.*: DOUBLE_WHITESPACE},
%r{href on element .*area<.*: DOUBLE_WHITESPACE},
%r{src on element .*img<.*: DOUBLE_WHITESPACE},
%r{href on element .*a<.*: CONTROL_CHARACTER},
%r{href on element .*a<.*: WHITESPACE in QUERY},
%r{src on element .*img<.*: WHITESPACE in PATH},
:code => :urispace, :weight => 75
rule %r{Zero is not a positive integer},
:code => :nonpositive, :weight => 79
rule %r{An ID must not be the empty string},
:code => :empty_id, :weight => 81
rule %r{Duplicate ID .*},
%r{The first occurrence of ID .* was here},
:code => :dup_id, :weight => 82
rule %r{Browsing context name must be at least one character long},
:code => :empty_target, :weight => 83
rule %r{An ID must not contain whitespace},
:code => :id_whitespace, :weight => 83
rule %r{Attribute modid},
%r{Attribute data},
%r{Attribute image not allowed on element .*img<},
%r{Attribute defaulturl not allowed on element .*form<},
%r{Attribute url not allowed on element .*img<},
%r{Attribute pos not allowed on element .*a<},
%r{Attribute qlicon not allowed on element .*img<},
%r{Attribute thumb not allowed on element .*img<},
%r{Attribute ql not allowed on element .*button<},
%r{Attribute smartpid not allowed on element .*input<},
%r{Attribute articleid not allowed on element .*span<},
%r{Attribute overflowurl not allowed on element .*span<},
%r{Attribute src not allowed on element .*span<},
%r{Attribute alt not allowed on element .*span<},
%r{Bad character .* Probable cause: Unescaped},
:code => :private_extension, :weight => 84
rule %r{An object element must have a data attribute or a type attribute},
:code => :nonstd_object, :weight => 84
rule %r{Element .*div<.* not allowed as child of element <},
%r{Element .*n<.* not allowed as child of element <},
%r{Element .*p<.* not allowed as child of element <},
%r{Element .*form<.* not allowed as child of element <},
%r{Element .*style<.* not allowed as child of element <},
%r{Start tag p seen in table},
%r{Start tag div seen in table},
%r{ must not appear as a descendant of the },
%r{An a start tag seen with already an active a element},
%r{must have an ID value that matches that for attribute},
%r{The for attribute of the label element must refer to a form control},
%r{there is no map element with a name attribute with that value},
:code => :schema, :weight => 85
# rule %r{Required attributes missing on element},
rule %r{An img element must have a src attribute},
:code => :required_attrs, :weight => 86
rule %r{Attribute name not allowed on element .*},
:code => :name_attr, :weight => 87
rule %r{Attribute widh not allowed on element},
:code => :nonstd_attribute_mispelled, :weight => 88
rule %r{Attribute \w+:[^<]*;[^<]*},
:code => :style_as_attribute, :weight => 90
rule %r{Attribute ;},
:code => :stray_semicolon, :weight => 91
rule %r{Stray doctype},
:code => :stray_doctype, :weight => 91
rule %r{Bogus comment},
:code => :bogus_comment, :weight => 92
rule %r{Forbidden code point},
:code => :forbidden_code_point, :weight => 93
rule %r{src on element .*img<.*: CONTROL_CHARACTER in PATH},
:code => :space_in_uri_path, :weight => 94
rule %r{Attribute http:<},
%r{" in an unquoted attribute value},
%r{Attribute www\.},
%r{A slash was not immediate followed by ><},
:code => :syntax_attr, :weight => 95
rule %r{Internal encoding declaration .* disagrees with the actual encoding of the document},
:code => :encoding_error, :weight=>98
# main output
$cgi.html do |x|
x.header do
x.title 'Categorizing Validator Messages'
x.link :rel=>'stylesheet', :href=>'style.css'
x.meta :charset => 'utf-8'
end
x.body do
x.h1 "Categorizing Validator Messages - #{$param.site}"
counters = Hash.new {|hash,key| hash[key]=[]}
notes.each do |note|
match = [100, 'unknown']
$rules.each do |pattern, code, weight|
if note =~ pattern
match = [weight, code.to_s]
break
end
end
counters[match] << note
end
htmlentities = HTMLEntities.new
counters.keys.sort.reverse.each do |weight, code|
x.h2 "#{code} (#{counters[[weight, code]].length})"
x.ul do
counters[[weight, code]].each do |note|
x <<
htmlentities.decode(note.gsub('&','&').gsub('<','<').gsub('>','>').gsub('"','"').gsub(''','&apos')) + "\n"
end
end
end
end
end