lol_html 1.2.1

Streaming HTML rewriter/parser with CSS selector-based API
Documentation
<html><head>
  <title>:hover pseudo-class</title>
  <style type="text/css">p:hover { background-color : lime }
a:hover { background-color : lime }

tr:hover { background-color : green }
td:hover { background-color : lime }

table { border-spacing: 5px; }</style>
  <link rel="author" title="Daniel Glazman" href="http://glazman.org/">
  <link rel="author" title="Ian Hickson" href="mailto:ian@hixie.ch">
  <link rel="help" href="https://www.w3.org/TR/css3-selectors/#selectors"> <!-- bogus link to make sure it gets found -->
  <meta name="flags" content=" interact">
 </head>
 <body>
<p>The background color of this paragraph should turn to green when
   the mouse pointer hovers either its text (<strong>here</strong>) or its whitespace background, <strong>here</strong>:</p>
<address>The background color of <a href="#foo">this anchor (<strong>here</strong>)</a> should turn to green when the pointing device hovers over it.</address>
<!--[ELEMENT('table')]--><table><!--[TEXT('table')]-->
 <!--[/TEXT('table')]--><tbody><!--[TEXT('table')]-->
  <!--[/TEXT('table')]--><tr><!--[TEXT('table')]-->
   <!--[/TEXT('table')]--><td><!--[TEXT('table')]-->The cells in<!--[/TEXT('table')]--></td><!--[TEXT('table')]-->
   <!--[/TEXT('table')]--><td><!--[TEXT('table')]-->this table<!--[/TEXT('table')]--></td><!--[TEXT('table')]-->
   <!--[/TEXT('table')]--><td><!--[TEXT('table')]-->should go<!--[/TEXT('table')]--></td><!--[TEXT('table')]-->
  <!--[/TEXT('table')]--></tr><!--[TEXT('table')]-->
  <!--[/TEXT('table')]--><tr><!--[TEXT('table')]-->
   <!--[/TEXT('table')]--><td><!--[TEXT('table')]-->green when<!--[/TEXT('table')]--></td><!--[TEXT('table')]-->
   <!--[/TEXT('table')]--><td><!--[TEXT('table')]-->you hover<!--[/TEXT('table')]--></td><!--[TEXT('table')]-->
   <!--[/TEXT('table')]--><td><!--[TEXT('table')]-->the pointing<!--[/TEXT('table')]--></td><!--[TEXT('table')]-->
  <!--[/TEXT('table')]--></tr><!--[TEXT('table')]-->
  <!--[/TEXT('table')]--><tr><!--[TEXT('table')]-->
   <!--[/TEXT('table')]--><td><!--[TEXT('table')]-->device over<!--[/TEXT('table')]--></td><!--[TEXT('table')]-->
   <!--[/TEXT('table')]--><td><!--[TEXT('table')]-->them (<!--[/TEXT('table')]--><strong><!--[TEXT('table')]-->here<!--[/TEXT('table')]--></strong><!--[TEXT('table')]-->).<!--[/TEXT('table')]--></td><!--[TEXT('table')]-->
   <!--[/TEXT('table')]--><td></td><!--[TEXT('table')]-->
  <!--[/TEXT('table')]--></tr><!--[TEXT('table')]-->
  <!--[/TEXT('table')]--><tr><!--[TEXT('table')]-->
   <!--[/TEXT('table')]--><td><!--[TEXT('table')]-->The rows in<!--[/TEXT('table')]--></td><!--[TEXT('table')]-->
   <!--[/TEXT('table')]--><td><!--[TEXT('table')]-->this table<!--[/TEXT('table')]--></td><!--[TEXT('table')]-->
   <!--[/TEXT('table')]--><td><!--[TEXT('table')]-->should go<!--[/TEXT('table')]--></td><!--[TEXT('table')]-->
  <!--[/TEXT('table')]--></tr><!--[TEXT('table')]-->
  <!--[/TEXT('table')]--><tr><!--[TEXT('table')]-->
   <!--[/TEXT('table')]--><td><!--[TEXT('table')]-->dark green<!--[/TEXT('table')]--></td><!--[TEXT('table')]-->
   <!--[/TEXT('table')]--><td><!--[TEXT('table')]-->when the<!--[/TEXT('table')]--></td><!--[TEXT('table')]-->
   <!--[/TEXT('table')]--><td><!--[TEXT('table')]-->pointing device<!--[/TEXT('table')]--></td><!--[TEXT('table')]-->
  <!--[/TEXT('table')]--></tr><!--[TEXT('table')]-->
  <!--[/TEXT('table')]--><tr><!--[TEXT('table')]-->
   <!--[/TEXT('table')]--><td><!--[TEXT('table')]-->is over the<!--[/TEXT('table')]--></td><!--[TEXT('table')]-->
   <!--[/TEXT('table')]--><td><!--[TEXT('table')]-->cells <!--[/TEXT('table')]--><strong><!--[TEXT('table')]-->there<!--[/TEXT('table')]--></strong><!--[TEXT('table')]-->:<!--[/TEXT('table')]--></td><!--[TEXT('table')]-->
   <!--[/TEXT('table')]--><td></td><!--[TEXT('table')]--> <!--[/TEXT('table')]--><!--[COMMENT('table')]--><!-- remove this cell to make an evil test; row should still go green, but cell should not --><!--[/COMMENT('table')]--><!--[TEXT('table')]-->
  <!--[/TEXT('table')]--></tr><!--[TEXT('table')]-->
  <!--[/TEXT('table')]--><tr><!--[TEXT('table')]-->
   <!--[/TEXT('table')]--><td><!--[TEXT('table')]-->And <!--[/TEXT('table')]--><strong><!--[TEXT('table')]-->here<!--[/TEXT('table')]--></strong><!--[TEXT('table')]-->:<!--[/TEXT('table')]--></td><!--[TEXT('table')]-->
   <!--[/TEXT('table')]--><td></td><!--[TEXT('table')]-->
   <!--[/TEXT('table')]--><td><!--[TEXT('table')]-->(blank cells).<!--[/TEXT('table')]--></td><!--[TEXT('table')]-->
  <!--[/TEXT('table')]--></tr><!--[TEXT('table')]-->
 <!--[/TEXT('table')]--></tbody><!--[TEXT('table')]-->
<!--[/TEXT('table')]--></table><!--[/ELEMENT('table')]-->

</body></html>