# trimgmi

Opinionated parsing of gemtext.

## Usage

See "convert", "command" and "sample" modules for examples.

> FIXME: Document this in more detail.

## Description

Gemtext (GMI) is a lightweight, line-oriented markup language designed for the Gemini internet protocol. This module parses gemtext, ignoring extraneous whitespace. Text after closing ``` marks is also ignored.

The resulting objects can be rendered line-by-line without further parsing logic.

Also included are:

* round-trip render back to GMI with minimal whitespace
* simple render to CommonMark
* opinionated render to HTML
* primitive command line tools for the above

Read more about gemtext (requires Gemini client):

=> gemini://gemini.circumlunar.space/docs/gemtext.gmi

Read more about gemtext (proxy for web clients):

=> https://gemini.circumlunar.space/docs/gemtext.gmi

## Implementation

This module has no external dependencies.

This implementation is deliberately verbose so that a developer can confirm by reading that the parser follows the gemtext specification. Optimising the core module is out-of-scope.

## Testing

The following commands should run without changing the target files:

```bash
trimgi test_search
# example.gmi remains tidy
# example.txt remains untidy
# *.license remain unchanged

convertgmi gmi README test_output/README.gmi  # identical
convertgmi md README test_output/README.md  # readable
convertgmi html README test_output/README.html  # readable
```

> FIXME: Implement and document a comprehensive round-trip test harness.

## Build

```
python setup.py sdist bdist_wheel
```

If everything works as expected you should end up with the files:

```
dist/trimgmi-<version>-py3-none-any.whl
dist/trimgmi-<version>.tar.gz
```

You can now optionally upload to PyPI:

```
twine upload dist/*
```

# Sharing and contributions

```
trimgmi
https://gitlab.com/lofidevops/trimgmi
Copyright 2022 David Seaward and contributors
SPDX-License-Identifier: GPL-3.0-or-later
```

Shared under GPL-3.0-or-later. We adhere to the Contributor Covenant 2.0 without modification, and certify origin per DCO 1.1 with a signed-off-by line (git -s). Contributions under the same terms are welcome.

For details see COPYING, CODE_OF_CONDUCT.md (report via private ticket) and CONTRIBUTING.DCO.txt.
