@require(changelog)
## Download Specifications & Changelog
gender\*render follows a strict set of easily implementable specifications.
The implementations explain in-depth which design decision was taken why and how gender\*render works exactly, but also define guidelines for re-implementing gender\*render for different programming- and well as natural languages, and contain various findings and ideas/ concepts on how to deal with various aspects of grammatical gender and automated gendering in a technical context, some of whom might help you in writing related or similar tools.
There is one main specification ("spec"), as well as several extensions specifications ("ext-...").
To get started, you can download the [main specification](https://phseiff.com/gender-render/docs/specs/spec/latest.pdf), which dives further into the versioning scheme of gender\*render specifications, their vision and development model, or download any specification in any version from the following list.
Clicking a version number downloads the specification as a pdf file, whilst the [html
]-link next to every specification version leads to a hosted html version of the specification.
@for spec_name in sorted(open("docs/specs/specs.txt", "r").read().split("\n")):
* @{spec_name}:
* [download latest](https://phseiff.com/gender-render/docs/specs/@{spec_name}/latest.pdf)
@for version in sorted(open("docs/specs/" + spec_name + "/versions.txt", "r").read().split("\n"), key=lambda v: tuple(v[1:].split(".")), reverse=True):
* [@{version}](https://phseiff.com/gender-render/docs/specs/@{spec_name}/@{spec_name}-@{version}.pdf)
[[html
]](https://phseiff.com/gender-render/docs/specs/@{spec_name}/@{spec_name}-@{version}.html)@{(" - " + changelog[spec_name][version[1:]]) if spec_name in changelog and version[1:] in changelog[spec_name] else ""}
@end
@end