Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support nested pages (python.py) #163

Open
wants to merge 22 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
864180f
Add basic support for nested pages
sizmailov Jun 26, 2020
a8174d2
Patch references in nested pages
sizmailov Jun 26, 2020
4006ec0
Prevent caching 'format_url' filter results
sizmailov Jun 26, 2020
ec4c8f9
Create breadcrumb for nested pages
sizmailov Jun 27, 2020
64302c9
Patch image src too
sizmailov Jun 27, 2020
db97443
Add nested page test
sizmailov Jun 27, 2020
004d881
Fix order of parents)
sizmailov Jun 27, 2020
8686cd0
Fix double-formatting urls
sizmailov Jun 27, 2020
f47af6d
Add cross references to nested page test
sizmailov Jun 27, 2020
0f83718
Use '/' as nested page separator, avoid `/index` suffix
sizmailov Jun 27, 2020
576320d
Simplify site_root handling
sizmailov Jun 27, 2020
6b38389
Augment search resuls with '../'* prefixes in nested pages
sizmailov Jun 27, 2020
7d09e76
Use breadcrumb page names in search instead of path
sizmailov Jun 27, 2020
8a4ac51
Avoid adding extra script line in flat sites
sizmailov Jun 27, 2020
34c32ce
(?) Fix discrepancy between offset calculation and entry write
sizmailov Jun 27, 2020
c98516f
Fix searchdata.bin download url in nested pages
sizmailov Jun 27, 2020
e65d5bd
Test for missing `index.rst` in nested pages
sizmailov Jun 27, 2020
887f9da
Restore old behavior for input paths with `/`
sizmailov Jun 27, 2020
d27d5c0
Build hierarchy for 'pages' page
sizmailov Jun 27, 2020
a3fb447
Mirror images location in INPUT directory in OUTPUT
sizmailov Jun 27, 2020
6a9f3ad
Use stateless template filters, revert most of changes from 864180f4
sizmailov Jun 28, 2020
3861776
Test pure paths links
sizmailov Jun 28, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion documentation/_search.py
Original file line number Diff line number Diff line change
Expand Up @@ -264,7 +264,7 @@ def serialize(self, merge_prefixes=True) -> bytearray:
if e.flags & ResultFlag.HAS_SUFFIX:
output += self.suffix_length_struct.pack(e.suffix_length)
output += e.name.encode('utf-8')
if e.url:
if e.name and e.url:
Copy link
Contributor Author

@sizmailov sizmailov Jun 28, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This change made to match above lines (250-251):

            if e.name and e.url:
                 offset += len(e.url.encode('utf-8')) + 1

Could be it should be turned around.

output += b'\0'
output += e.url.encode('utf-8')

Expand Down
206 changes: 144 additions & 62 deletions documentation/python.py

Large diffs are not rendered by default.

3 changes: 2 additions & 1 deletion documentation/search.js
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ var Search = {
map: null,
typeMap: null,
maxResults: 0,
siteRoot: '', /* a '(../)*' string, needed for nested page support */

/* Always contains at least the root node offset and then one node offset
per entered character */
Expand Down Expand Up @@ -511,7 +512,7 @@ var Search = {
let list = '';
for(let i = 0; i != results.length; ++i) {
/* Labels + */
list += '<li' + (i ? '' : ' id="search-current"') + '><a href="' + results[i].url + '" onmouseover="selectResult(event)" data-md-link-title="' + this.escape(results[i].name.substr(results[i].name.length - this.searchString.length - results[i].suffixLength)) + '"><div class="m-label m-flat ' + results[i].cssClass + '">' + results[i].typeName + '</div>' + (results[i].flags & 2 ? '<div class="m-label m-danger">deprecated</div>' : '') + (results[i].flags & 4 ? '<div class="m-label m-danger">deleted</div>' : '');
list += '<li' + (i ? '' : ' id="search-current"') + '><a href="' + this.siteRoot + results[i].url + '" onmouseover="selectResult(event)" data-md-link-title="' + this.escape(results[i].name.substr(results[i].name.length - this.searchString.length - results[i].suffixLength)) + '"><div class="m-label m-flat ' + results[i].cssClass + '">' + results[i].typeName + '</div>' + (results[i].flags & 2 ? '<div class="m-label m-danger">deprecated</div>' : '') + (results[i].flags & 4 ? '<div class="m-label m-danger">deleted</div>' : '');

/* Render the alias (cut off from the right) */
if(results[i].alias) {
Expand Down
29 changes: 16 additions & 13 deletions documentation/templates/python/base.html
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@
<meta charset="UTF-8" />
<title>{% block title %}{{ PROJECT_TITLE }}{% if PROJECT_SUBTITLE %} {{ PROJECT_SUBTITLE }}{% endif %}{% endblock %}</title>
{% for css in STYLESHEETS %}
<link rel="stylesheet" href="{{ css|format_url|e }}" />
<link rel="stylesheet" href="{{ css|format_url(site_root)|e }}" />
{% endfor %}
{% if FAVICON %}
<link rel="icon" href="{{ FAVICON[0]|format_url|e }}" type="{{ FAVICON[1] }}" />
<link rel="icon" href="{{ FAVICON[0]|format_url(site_root)|e }}" type="{{ FAVICON[1] }}" />
{% endif %}
{% if not SEARCH_DISABLED and SEARCH_BASE_URL %}
<link rel="search" type="application/opensearchdescription+xml" href="opensearch.xml" title="Search {{ PROJECT_TITLE }} documentation" />
Expand All @@ -28,10 +28,10 @@
<div class="m-row">
{% if MAIN_PROJECT_URL and PROJECT_SUBTITLE %}
<span id="m-navbar-brand" class="m-col-t-8 m-col-m-none m-left-m">
<a href="{{ MAIN_PROJECT_URL }}">{% if PROJECT_LOGO %}<img src="{{ PROJECT_LOGO|format_url|e }}" alt="" />{% endif %}{{ PROJECT_TITLE }}</a> <span class="m-breadcrumb">|</span> <a href="{{ 'index'|path_to_url }}" class="m-thin">{{ PROJECT_SUBTITLE }}</a>
<a href="{{ MAIN_PROJECT_URL }}">{% if PROJECT_LOGO %}<img src="{{ PROJECT_LOGO|format_url(site_root)|e }}" alt="" />{% endif %}{{ PROJECT_TITLE }}</a> <span class="m-breadcrumb">|</span> <a href="{{ 'index'|path_to_url(site_root) }}" class="m-thin">{{ PROJECT_SUBTITLE }}</a>
</span>
{% else %}
<a href="{{ 'index'|path_to_url }}" id="m-navbar-brand" class="m-col-t-8 m-col-m-none m-left-m">{% if PROJECT_LOGO %}<img src="{{ PROJECT_LOGO|format_url|e }}" alt="" />{% endif %}{{ PROJECT_TITLE }}{% if PROJECT_SUBTITLE %} <span class="m-thin">{{ PROJECT_SUBTITLE }}</span>{% endif %}</a>
<a href="{{ 'index'|path_to_url(site_root) }}" id="m-navbar-brand" class="m-col-t-8 m-col-m-none m-left-m">{% if PROJECT_LOGO %}<img src="{{ PROJECT_LOGO|format_url(site_root)|e }}" alt="" />{% endif %}{{ PROJECT_TITLE }}{% if PROJECT_SUBTITLE %} <span class="m-thin">{{ PROJECT_SUBTITLE }}</span>{% endif %}</a>
{% endif %}
{% if LINKS_NAVBAR1 or LINKS_NAVBAR2 or not SEARCH_DISABLED %}
<div class="m-col-t-4 m-hide-m m-text-right m-nopadr">
Expand All @@ -48,13 +48,13 @@
<ol class="{% if M_LINKS_NAVBAR2 %}m-col-t-6{% else %}m-col-t-12{% endif %} m-col-m-none">
{% for title, path, sub in LINKS_NAVBAR1 %}
{% if not sub %}
<li><a href="{{ path|path_to_url }}"{% if (page and page.path == path) or navbar_current == path %} id="m-navbar-current"{% endif %}>{{ title }}</a></li>
<li><a href="{{ path|path_to_url(site_root) }}"{% if (page and page.path == path) or navbar_current == path %} id="m-navbar-current"{% endif %}>{{ title }}</a></li>
{% else %}
<li>
<a href="{{ path|path_to_url }}"{% if (page and page.path == path) or navbar_current == path %} id="m-navbar-current"{% endif %}>{{ title }}</a>
<a href="{{ path|path_to_url(site_root) }}"{% if (page and page.path == path) or navbar_current == path %} id="m-navbar-current"{% endif %}>{{ title }}</a>
<ol>
{% for title, path in sub %}
<li><a href="{{ path|path_to_url }}"{% if (page and page.path == path) or navbar_current == path %} id="m-navbar-current"{% endif %}>{{ title }}</a></li>
<li><a href="{{ path|path_to_url(site_root) }}"{% if (page and page.path == path) or navbar_current == path %} id="m-navbar-current"{% endif %}>{{ title }}</a></li>
{% endfor %}
</ol>
</li>
Expand All @@ -66,13 +66,13 @@
<ol class="m-col-t-6 m-col-m-none" start="{{ start }}">
{% for title, path, sub in LINKS_NAVBAR2 %}
{% if not sub %}
<li><a href="{{ path|path_to_url }}"{% if (page and page.path == path) or navbar_current == path %} id="m-navbar-current"{% endif %}>{{ title }}</a></li>
<li><a href="{{ path|path_to_url(site_root) }}"{% if (page and page.path == path) or navbar_current == path %} id="m-navbar-current"{% endif %}>{{ title }}</a></li>
{% else %}
<li>
<a href="{{ path|path_to_url }}"{% if (page and page.path == path) or navbar_current == path %} id="m-navbar-current"{% endif %}>{{ title }}</a>
<a href="{{ path|path_to_url(site_root) }}"{% if (page and page.path == path) or navbar_current == path %} id="m-navbar-current"{% endif %}>{{ title }}</a>
<ol>
{% for title, path in sub %}
<li><a href="{{ path|path_to_url }}"{% if (page and page.path == path) or navbar_current == path %} id="m-navbar-current"{% endif %}>{{ title }}</a></li>
<li><a href="{{ path|path_to_url(site_root) }}"{% if (page and page.path == path) or navbar_current == path %} id="m-navbar-current"{% endif %}>{{ title }}</a></li>
{% endfor %}
</ol>
</li>
Expand Down Expand Up @@ -129,13 +129,16 @@
</div>
</div>
</div>
<script src="{{ 'search.js'|format_url|e }}"></script>
<script src="{{ 'search.js'|format_url(site_root)|e }}"></script>
{% if site_root %}
<script> Search.siteRoot = "{{ site_root }}"; </script>
{% endif %}
{% if SEARCH_DOWNLOAD_BINARY %}
<script>
Search.download({% if SEARCH_DOWNLOAD_BINARY is string %}'{{ SEARCH_DOWNLOAD_BINARY.format(SEARCHDATA_FORMAT_VERSION)|format_url|e }}'{% else %}window.location.pathname.substr(0, window.location.pathname.lastIndexOf('/') + 1) + 'searchdata-v{{ SEARCHDATA_FORMAT_VERSION }}.bin'{% endif %});
Search.download({% if SEARCH_DOWNLOAD_BINARY is string %}'{{ SEARCH_DOWNLOAD_BINARY.format(SEARCHDATA_FORMAT_VERSION)|format_url(site_root)|e }}'{% else %}window.location.pathname.substr(0, window.location.pathname.lastIndexOf('/') + 1){% if site_root %} + '{{site_root}}' {% endif %} + 'searchdata-v{{ SEARCHDATA_FORMAT_VERSION }}.bin'{% endif %});
</script>
{% else %}
<script src="{{ 'searchdata-v{}.js'.format(SEARCHDATA_FORMAT_VERSION)|format_url|e }}" async="async"></script>
<script src="{{ 'searchdata-v{}.js'.format(SEARCHDATA_FORMAT_VERSION)|format_url(site_root)|e }}" async="async"></script>
{% endif %}
{% endif %}
{% if FINE_PRINT %}
Expand Down
4 changes: 2 additions & 2 deletions documentation/templates/python/page.html
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
{% extends 'base.html' %}

{% block title %}{% set j = joiner('.') %}{% for name, _ in page.breadcrumb %}{{ j() }}{{ name }}{% endfor %} | {{ super() }}{% endblock %}
{% block title %}{% set j = joiner(' &raquo; ') %}{% for name, _ in page.breadcrumb %}{{ j() }}{{ name }}{% endfor %} | {{ super() }}{% endblock %}

{% block main %}
<h1>
{%+ for name, target in page.breadcrumb[:-1] %}<span class="m-breadcrumb"><a href="{{ target }}">{{ name }}</a>.<wbr/></span>{% endfor %}{{ page.breadcrumb[-1][0] }}
{%+ for name, target in page.breadcrumb[:-1] %}<span class="m-breadcrumb"><a href="{{ target }}">{{ name }}</a> &raquo; <wbr/></span>{% endfor %}{{ page.breadcrumb[-1][0] }}
</h1>
{% if page.summary %}
<p>{{ page.summary }}</p>
Expand Down
102 changes: 102 additions & 0 deletions documentation/test_python/page_nested/classes.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>My Python Project</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:400,400i,600,600i%7CSource+Code+Pro:400,400i,600" />
<link rel="stylesheet" href="m-dark+documentation.compiled.css" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
</head>
<body>
<header><nav id="navigation">
<div class="m-container">
<div class="m-row">
<a href="index.html" id="m-navbar-brand" class="m-col-t-8 m-col-m-none m-left-m">My Python Project</a>
<div class="m-col-t-4 m-hide-m m-text-right m-nopadr">
<a href="#search" class="m-doc-search-icon" title="Search" onclick="return showSearch()"><svg style="height: 0.9rem;" viewBox="0 0 16 16">
<path id="m-doc-search-icon-path" d="m6 0c-3.31 0-6 2.69-6 6 0 3.31 2.69 6 6 6 1.49 0 2.85-0.541 3.89-1.44-0.0164 0.338 0.147 0.759 0.5 1.15l3.22 3.79c0.552 0.614 1.45 0.665 2 0.115 0.55-0.55 0.499-1.45-0.115-2l-3.79-3.22c-0.392-0.353-0.812-0.515-1.15-0.5 0.895-1.05 1.44-2.41 1.44-3.89 0-3.31-2.69-6-6-6zm0 1.56a4.44 4.44 0 0 1 4.44 4.44 4.44 4.44 0 0 1-4.44 4.44 4.44 4.44 0 0 1-4.44-4.44 4.44 4.44 0 0 1 4.44-4.44z"/>
</svg></a>
<a id="m-navbar-show" href="#navigation" title="Show navigation"></a>
<a id="m-navbar-hide" href="#" title="Hide navigation"></a>
</div>
<div id="m-navbar-collapse" class="m-col-t-12 m-show-m m-col-m-none m-right-m">
<div class="m-row">
<ol class="m-col-t-12 m-col-m-none">
<li><a href="./custom">Custom</a></li>
</ol>
<ol class="m-col-t-6 m-col-m-none" start="2">
<li class="m-show-m"><a href="#search" class="m-doc-search-icon" title="Search" onclick="return showSearch()"><svg style="height: 0.9rem;" viewBox="0 0 16 16">
<use href="#m-doc-search-icon-path" />
</svg></a></li>
</ol>
</div>
</div>
</div>
</div>
</nav></header>
<main><article>
<div class="m-container m-container-inflatable">
<div class="m-row">
<div class="m-col-l-10 m-push-l-1">
<h1>Classes</h2>
<ul class="m-doc">
</ul>
<script>
function toggle(e) {
e.parentElement.className = e.parentElement.className == 'm-doc-collapsible' ?
'm-doc-expansible' : 'm-doc-collapsible';
return false;
}
/* Collapse all nodes marked as such. Doing it via JS instead of
directly in markup so disabling it doesn't harm usability. The list
is somehow regenerated on every iteration and shrinks as I change
the classes. It's not documented anywhere and I'm not sure if this
is the same across browsers, so I am going backwards in that list to
be sure. */
var collapsed = document.getElementsByClassName("collapsed");
for(var i = collapsed.length - 1; i >= 0; --i)
collapsed[i].className = 'm-doc-expansible';
</script>
</div>
</div>
</div>
</article></main>
<div class="m-doc-search" id="search">
<a href="#!" onclick="return hideSearch()"></a>
<div class="m-container">
<div class="m-row">
<div class="m-col-m-8 m-push-m-2">
<div class="m-doc-search-header m-text m-small">
<div><span class="m-label m-default">Tab</span> / <span class="m-label m-default">T</span> to search, <span class="m-label m-default">Esc</span> to close</div>
<div id="search-symbolcount">&hellip;</div>
</div>
<div class="m-doc-search-content">
<form>
<input type="search" name="q" id="search-input" placeholder="Loading &hellip;" disabled="disabled" autofocus="autofocus" autocomplete="off" spellcheck="false" />
</form>
<noscript class="m-text m-danger m-text-center">Unlike everything else in the docs, the search functionality <em>requires</em> JavaScript.</noscript>
<div id="search-help" class="m-text m-dim m-text-center">
<p class="m-noindent">Search for modules, classes, functions and other
symbols. You can omit any prefix from the symbol path; adding a <code>.</code>
suffix lists all members of given symbol.</p>
<p class="m-noindent">Use <span class="m-label m-dim">&darr;</span>
/ <span class="m-label m-dim">&uarr;</span> to navigate through the list,
<span class="m-label m-dim">Enter</span> to go.
<span class="m-label m-dim">Tab</span> autocompletes common prefix, you can
copy a link to the result using <span class="m-label m-dim">⌘</span>
<span class="m-label m-dim">L</span> while <span class="m-label m-dim">⌘</span>
<span class="m-label m-dim">M</span> produces a Markdown link.</p>
</div>
<div id="search-notfound" class="m-text m-warning m-text-center">Sorry, nothing was found.</div>
<ul id="search-results"></ul>
</div>
</div>
</div>
</div>
</div>
<script src="search-v1.js"></script>
<script>
Search.download(window.location.pathname.substr(0, window.location.pathname.lastIndexOf('/') + 1) + 'searchdata-v1.bin');
</script>
</body>
</html>
88 changes: 88 additions & 0 deletions documentation/test_python/page_nested/examples/advanced/barz.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Examples &raquo; Advanced &raquo; Barz | My Python Project</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:400,400i,600,600i%7CSource+Code+Pro:400,400i,600" />
<link rel="stylesheet" href="../../m-dark+documentation.compiled.css" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
</head>
<body>
<header><nav id="navigation">
<div class="m-container">
<div class="m-row">
<a href="../../index.html" id="m-navbar-brand" class="m-col-t-8 m-col-m-none m-left-m">My Python Project</a>
<div class="m-col-t-4 m-hide-m m-text-right m-nopadr">
<a href="#search" class="m-doc-search-icon" title="Search" onclick="return showSearch()"><svg style="height: 0.9rem;" viewBox="0 0 16 16">
<path id="m-doc-search-icon-path" d="m6 0c-3.31 0-6 2.69-6 6 0 3.31 2.69 6 6 6 1.49 0 2.85-0.541 3.89-1.44-0.0164 0.338 0.147 0.759 0.5 1.15l3.22 3.79c0.552 0.614 1.45 0.665 2 0.115 0.55-0.55 0.499-1.45-0.115-2l-3.79-3.22c-0.392-0.353-0.812-0.515-1.15-0.5 0.895-1.05 1.44-2.41 1.44-3.89 0-3.31-2.69-6-6-6zm0 1.56a4.44 4.44 0 0 1 4.44 4.44 4.44 4.44 0 0 1-4.44 4.44 4.44 4.44 0 0 1-4.44-4.44 4.44 4.44 0 0 1 4.44-4.44z"/>
</svg></a>
<a id="m-navbar-show" href="#navigation" title="Show navigation"></a>
<a id="m-navbar-hide" href="#" title="Hide navigation"></a>
</div>
<div id="m-navbar-collapse" class="m-col-t-12 m-show-m m-col-m-none m-right-m">
<div class="m-row">
<ol class="m-col-t-12 m-col-m-none">
<li><a href="../.././custom">Custom</a></li>
</ol>
<ol class="m-col-t-6 m-col-m-none" start="2">
<li class="m-show-m"><a href="#search" class="m-doc-search-icon" title="Search" onclick="return showSearch()"><svg style="height: 0.9rem;" viewBox="0 0 16 16">
<use href="#m-doc-search-icon-path" />
</svg></a></li>
</ol>
</div>
</div>
</div>
</div>
</nav></header>
<main><article>
<div class="m-container m-container-inflatable">
<div class="m-row">
<div class="m-col-l-10 m-push-l-1">
<h1>
<span class="m-breadcrumb"><a href="../../examples/index.html">Examples</a> &raquo; <wbr/></span><span class="m-breadcrumb"><a href="../../examples/advanced/index.html">Advanced</a> &raquo; <wbr/></span>Barz
</h1>
<p>The <a href="#barz">barz section</a> example is shown here. It's one of <a class="m-doc" href="../../examples/advanced/index.html">advanced examples</a>,</p>
</div>
</div>
</div>
</article></main>
<div class="m-doc-search" id="search">
<a href="#!" onclick="return hideSearch()"></a>
<div class="m-container">
<div class="m-row">
<div class="m-col-m-8 m-push-m-2">
<div class="m-doc-search-header m-text m-small">
<div><span class="m-label m-default">Tab</span> / <span class="m-label m-default">T</span> to search, <span class="m-label m-default">Esc</span> to close</div>
<div id="search-symbolcount">&hellip;</div>
</div>
<div class="m-doc-search-content">
<form>
<input type="search" name="q" id="search-input" placeholder="Loading &hellip;" disabled="disabled" autofocus="autofocus" autocomplete="off" spellcheck="false" />
</form>
<noscript class="m-text m-danger m-text-center">Unlike everything else in the docs, the search functionality <em>requires</em> JavaScript.</noscript>
<div id="search-help" class="m-text m-dim m-text-center">
<p class="m-noindent">Search for modules, classes, functions and other
symbols. You can omit any prefix from the symbol path; adding a <code>.</code>
suffix lists all members of given symbol.</p>
<p class="m-noindent">Use <span class="m-label m-dim">&darr;</span>
/ <span class="m-label m-dim">&uarr;</span> to navigate through the list,
<span class="m-label m-dim">Enter</span> to go.
<span class="m-label m-dim">Tab</span> autocompletes common prefix, you can
copy a link to the result using <span class="m-label m-dim">⌘</span>
<span class="m-label m-dim">L</span> while <span class="m-label m-dim">⌘</span>
<span class="m-label m-dim">M</span> produces a Markdown link.</p>
</div>
<div id="search-notfound" class="m-text m-warning m-text-center">Sorry, nothing was found.</div>
<ul id="search-results"></ul>
</div>
</div>
</div>
</div>
</div>
<script src="../../search-v1.js"></script>
<script> Search.siteRoot = "../../"; </script>
<script>
Search.download(window.location.pathname.substr(0, window.location.pathname.lastIndexOf('/') + 1) + '../../' + 'searchdata-v1.bin');
</script>
</body>
</html>
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
.. _Barz:

Barz
####

The `barz section <Barz_>`_ example is shown here. It's one of :ref:`advanced examples <std:doc:examples/advanced>`,
Loading