# encoding: utf-8 class HtmlCheck < ::HTML::Proofer::CheckRunner # new html5 tags (source: http://www.w3schools.com/html/html5_new_elements.asp) # and svg child tags (source: https://developer.mozilla.org/en-US/docs/Web/SVG/Element) HTML5_TAGS = %w(article aside bdi details dialog figcaption figure footer header main mark menuitem meter nav progress rp rt ruby section summary time wbr datalist keygen output color date datetime datetime-local email month number range search tel time url week canvas svg audio embed source track video altGlyph altGlyphDef altGlyphItem animate animateColor animateMotion animateTransform circle clipPath color-profile cursor defs desc ellipse feBlend feColorMatrix feComponentTransfer feComposite feConvolveMatrix feDiffuseLighting feDisplacementMap feDistantLight feFlood feFuncA feFuncB feFuncG feFuncR feGaussianBlur feImage feMerge feMergeNode feMorphology feOffset fePointLight feSpecularLighting feSpotLight feTile feTurbulence filter font font-face font-face-format font-face-name font-face-src font-face-uri foreignObject g glyph glyphRef hkern image line linearGradient marker mask metadata missing-glyph mpath path pattern polygon polyline radialGradient rect set stop switch symbol text textPath tref tspan use view vkern) def run @html.errors.each do |e| message = e.message line = e.line # Nokogiri (or rather libxml2 underhood) only recognizes html4 tags, # so we need to skip errors caused by the new tags in html5 next if HTML5_TAGS.include? message[/Tag ([\w-]+) invalid/o, 1] # tags embedded in scripts are used in templating languages: http://git.io/vOovv next if @validation_opts[:ignore_script_embeds] && message =~ /Element script embeds close tag/ add_issue(message, line) end end end