<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

  <xsl:template match="text()"/>

{{function clause_xpath}}
{{if !$clause.attribute}}
{{$clause.element}}{{elseif $clause.attribute == 'class'}}
{{$clause.element}}[contains(concat(' ', normalize-space(@class), ' '), '{{$clause.value}}')]{{else}}
{{$clause.element}}[@{{$clause.attribute}}='{{$clause.value}}']{{/if}}
{{/function}}

{{foreach $spec.include as $clause}}
  <xsl:template match="{{clause_xpath clause=$clause}}">
    <xsl:copy>
      <xsl:apply-templates select="node()|@*" mode="remove"/>
    </xsl:copy>
  </xsl:template>
{{/foreach}}

{{foreach $spec.exclude as $clause}}
  <xsl:template match="{{clause_xpath clause=$clause}}" mode="remove"/>
{{/foreach}}

  <xsl:template match="node()|@*" mode="remove">
    <xsl:copy>
      <xsl:apply-templates select="node()|@*" mode="remove"/>
    </xsl:copy>
  </xsl:template>

</xsl:stylesheet>