↩ go back to index

First Release of the Gemroff Markup Language

November 23, 2022

The second new program I've been working on for a while and finished this month, I'm announcing the release of the Gemroff markup language!

https://git.sr.ht/~nytpu/gemroff

It's both an Ada library and a CLI utility for parsing and rendering Gemroff markup to a variety of formats, currently:

Per the name, its heavily inspired by both Gemtext and Roff. The markup language itself is line-based like Gemtext, but supports inline markup as well as some additional block markup. Much of the inline markup takes inspiration from the Mandoc flavor of Roff. It handily delineates block markup from inline markup by having block markup be Gemtext-style symbols and inline markup be dotted like Roff macros (e.g. .Em is for emphasis).

The design is a mash-up of the sheer simplicity of line-based Gemtext, and my favorite parts of writing Roff and Mandoc. Notably, it has markup for enclosures such as quotations and parentheses; and like Mandoc has what I've termed abutting punctuation, which allows you to flexibly add punctuation next to, but not inside, inline markup elements. It also has several trigraphs so I can write my most-used pieces of Unicode punctuation on ASCII-only retro computers—where I often write Gemlog posts.

It's actually pretty weird to describe it as new, because I've been using it for almost a year and generally improving it as I came across issues or things I didn't like. However, this is the first public announcement of it (although the repo's been publicly available for those looking); and I have just finished rewriting it in Ada. The new implementation is much improved over the original poorly-written C implementation.

Related fun fact, all Gemlog posts I've written in 2022 have been written in Gemroff, and you can view the Gemroff source by changing the .gmi extension to .gr. For instance, here's the source for this post:

2022-11-23


Even if you don't care about Gemroff and won't ever use it (perfectly reasonable and understandable), here's a little bonus: I converted the Gemtext portion of the Gemini Specification to a man page!

gemtext(5)