{#
Copyright 2016 The Bazel Authors. All rights reserved.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
#}
<nav class="toc">
  <h2>Rule sets</h2>
  <ul>
% for ruleset in rulesets:
    <li><a href="#{{ ruleset.name }}">{{ ruleset.title }}</a></li>
% endfor
  </ul>
</nav>

% for ruleset in rulesets:
<h2><a href="{{ ruleset.output_file | doc_link }}" id="{{ ruleset.name }}">{{ ruleset.title }}</a></h2>

% if ruleset.rules[0] is defined:
<h3>Rules</h3>
<table class="overview-table">
  <colgroup>
    <col class="col-name" />
    <col class="col-description" />
  </colgroup>
  <tbody>
% for rule in ruleset.rules:
    <tr>
      <td>
        <a href="{{ ruleset.output_file | doc_link }}#{{ rule.name }}">
          <code>{{ rule.name }}</code>
        </a>
      </td>
      <td>
        {{ rule.short_documentation | markdown }}
      </td>
    </tr>
% endfor
  </tbody>
</table>
% endif

% if ruleset.macros[0] is defined:
<h3>Macros</h3>
<table class="overview-table">
  <colgroup>
    <col class="col-name" />
    <col class="col-description" />
  </colgroup>
  <tbody>
% for rule in ruleset.macros:
    <tr>
      <td>
        <a href="{{ ruleset.output_file | doc_link }}#{{ rule.name }}">
          <code>{{ rule.name }}</code>
        </a>
      </td>
      <td>
        {{ rule.short_documentation | markdown }}
      </td>
    </tr>
% endfor
  </tbody>
</table>
% endif

% if ruleset.repository_rules[0] is defined:
<h3>Repository Rules</h3>
<table class="overview-table">
  <colgroup>
    <col class="col-name" />
    <col class="col-description" />
  </colgroup>
  <tbody>
% for rule in ruleset.repository_rules:
    <tr>
      <td>
        <a href="{{ ruleset.output_file | doc_link }}#{{ rule.name }}">
          <code>{{ rule.name }}</code>
        </a>
      </td>
      <td>
        {{ rule.short_documentation | markdown }}
      </td>
    </tr>
% endfor
  </tbody>
</table>
% endif

% endfor
