lol_html 1.2.1

Streaming HTML rewriter/parser with CSS selector-based API
Documentation
<html><head>
  <title>:nth-last-of-type() pseudo-class with collapsed elements</title>
  <style type="text/css">
  line { display: block; }
  [type~=match] { background: red; }
  line:nth-last-of-type(3n-1) { background: lime; }
  [hidden] { visibility: collapse; }
</style>
  <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=" namespace">
 </head>
 <body>
 <test xmlns="http://www.example.org/">
  <!--[ELEMENT('line')]--><line type=""><!--[TEXT('line')]-->This line should be unstyled.<!--[/TEXT('line')]--></line><!--[/ELEMENT('line')]-->
  <!--[ELEMENT('line')]--><line type="match"><!--[TEXT('line')]-->This line should be green.<!--[/TEXT('line')]--></line><!--[/ELEMENT('line')]-->
  <!--[ELEMENT('line')]--><line type=""><!--[TEXT('line')]-->This line should be unstyled.<!--[/TEXT('line')]--></line><!--[/ELEMENT('line')]-->
  <!--[ELEMENT('line')]--><line type=""><!--[TEXT('line')]-->This line should be unstyled.<!--[/TEXT('line')]--></line><!--[/ELEMENT('line')]-->
  <!--[ELEMENT('line')]--><line type="match"><!--[TEXT('line')]-->This line should be green.<!--[/TEXT('line')]--></line><!--[/ELEMENT('line')]-->
  <!--[ELEMENT('line')]--><line type=""><!--[TEXT('line')]-->This line should be unstyled.<!--[/TEXT('line')]--></line><!--[/ELEMENT('line')]-->
  <!--[ELEMENT('line')]--><line type=""><!--[TEXT('line')]-->This line should be unstyled.<!--[/TEXT('line')]--></line><!--[/ELEMENT('line')]-->
  <!--[ELEMENT('line')]--><line type="match" hidden="hidden"><!--[TEXT('line')]-->This line should be green.<!--[/TEXT('line')]--></line><!--[/ELEMENT('line')]-->
  <!--[ELEMENT('line')]--><line type="" hidden="hidden"><!--[TEXT('line')]-->This line should be unstyled.<!--[/TEXT('line')]--></line><!--[/ELEMENT('line')]-->
  <!--[ELEMENT('line')]--><line type=""><!--[TEXT('line')]-->This line should be unstyled.<!--[/TEXT('line')]--></line><!--[/ELEMENT('line')]-->
  <!--[ELEMENT('line')]--><line type="match"><!--[TEXT('line')]-->This line should be green.<!--[/TEXT('line')]--></line><!--[/ELEMENT('line')]-->
  <!--[ELEMENT('line')]--><line type=""><!--[TEXT('line')]-->This line should be unstyled.<!--[/TEXT('line')]--></line><!--[/ELEMENT('line')]-->
  <!--[ELEMENT('line')]--><line type=""><!--[TEXT('line')]-->This line should be unstyled.<!--[/TEXT('line')]--></line><!--[/ELEMENT('line')]-->
  <!--[ELEMENT('line')]--><line type="match"><!--[TEXT('line')]-->This line should be green.<!--[/TEXT('line')]--></line><!--[/ELEMENT('line')]-->
  <!--[ELEMENT('line')]--><line type="" hidden="hidden"><!--[TEXT('line')]-->This line should be unstyled.<!--[/TEXT('line')]--></line><!--[/ELEMENT('line')]-->
  <!--[ELEMENT('line')]--><line type=""><!--[TEXT('line')]-->This line should be unstyled.<!--[/TEXT('line')]--></line><!--[/ELEMENT('line')]-->
  <!--[ELEMENT('line')]--><line type="match"><!--[TEXT('line')]-->This line should be green.<!--[/TEXT('line')]--></line><!--[/ELEMENT('line')]-->
  <!--[ELEMENT('line')]--><line type=""><!--[TEXT('line')]-->This line should be unstyled.<!--[/TEXT('line')]--></line><!--[/ELEMENT('line')]-->
  <!--[ELEMENT('line')]--><line type=""><!--[TEXT('line')]-->This line should be unstyled.<!--[/TEXT('line')]--></line><!--[/ELEMENT('line')]-->
  <!--[ELEMENT('line')]--><line type="match"><!--[TEXT('line')]-->This line should be green.<!--[/TEXT('line')]--></line><!--[/ELEMENT('line')]-->
  <!--[ELEMENT('line')]--><line type=""><!--[TEXT('line')]-->This line should be unstyled.<!--[/TEXT('line')]--></line><!--[/ELEMENT('line')]-->
 </test>

</body></html>