lol_html 1.2.1

Streaming HTML rewriter/parser with CSS selector-based API
Documentation
<!DOCTYPE html><html><head>
  <title>NEGATED Substring matching attribute selector on end with universal namespace</title>
  <style type="text/css">@namespace a url(http://www.example.org/a);
@namespace b url(http://www.example.org/b);
@namespace html url(http://www.w3.org/1999/xhtml);
*|p, *|q, *|r, *|s, *|t{ display : block ; margin-bottom : 1em }
*|p.red, *|q, *|t { background-color : lime ! important }
div.stub *|*:not([*|title$="tait"]) { background-color : red }</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 -->
  <link rel="match" href="reference/lime-bg-paras-u-g-g-u-u-g.xht">
  <meta name="flags" content=" namespace">
 </head>
 <body xmlns:a="http://www.example.org/a" xmlns:b="http://www.example.org/b">
<div class="stub">
<p title="si on chantait">This paragraph should be unstyled.</p>
<p title="si tu chantais" class="red"><!--Replaced (div.stub *|*:not([*|title$="tait"])) --></p>
<q xmlns="http://www.example.org/a" a:title="si nous chantions"><!--Replaced (div.stub *|*:not([*|title$="tait"])) --></q>
<r xmlns="http://www.example.org/a" a:title="si on chantait"><!--Replaced (div.stub *|*:not([*|title$="tait"])) --></r>
<s xmlns="http://www.example.org/b" b:title="si on chantait"><!--Replaced (div.stub *|*:not([*|title$="tait"])) --></s>
<t xmlns="http://www.example.org/b" b:ti="si on chantait"><!--Replaced (div.stub *|*:not([*|title$="tait"])) --></t>
</div>

</body></html>