Testing ground for GUI
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Přemysl Eric Janouch 442fa5d660
Bump libasciidoc
2 months ago
README.adoc hswg: add a minimal README.adoc 11 months ago
asciidoc.go hswg: split out asciidoc.go 11 months ago
main.go Bump libasciidoc 2 months ago


hswg: a static website generator

hswg wraps libasciidoc to make it understand more syntax, namely two-line/underlined titles, and can be run either as a filter, or as a simple wiki-like site generator.

Gitea/cgit AsciiDoc processor

Wrap hswg in the following script to give it a few superpowers:

# Make this also work for cgit which, strangely enough, is willing to render
# /anything/ via the /about route, only passing through image/* unchanged.
if [ -z "$GITEA_PREFIX_SRC" ]; then
    test "${1%.adoc}" != "$1" || exit 1
    cgit_fixups='s/<div class="content">/<div>/'

# libasciidoc can't be helped in other ways so far, adding support for:
#  - the original _italics_ syntax
#  - double-line headings (part of haven's hswg which invokes libasciidoc)
#  - make links to other documents work, normally an attribute could be used
perl -pe "s|'([-~/\\.\\w]+)'|_\$1_|g;" | hswg 2>/dev/null | \
    perl -pe 's|(href=")([^/][^:]*?")|$1$ENV{GITEA_PREFIX_SRC}/$2|;' \
        -e 's|(src=")([^/][^:]*?")|$1$ENV{GITEA_PREFIX_RAW}/$2|;' \
        -e "$cgit_fixups"

Then, to set it up in Gitea, include the following snippet in your app.ini:

ENABLED         = true
FILE_EXTENSIONS = .adoc,.asciidoc
RENDER_COMMAND  = /usr/local/bin/hswg-gitea
IS_INPUT_FILE   = false

Similarly for cgit, the following cgitrc snippet might do the job:


If parsing fails for some reason, the contents will be wrapped in HTML verbatim as plain text.

Wiki mode

The program will read a Go template for the index page from its standard input, and another template for rendered pages from the path given as its first argument. The second argument specifies the output filename for the index page, and the last one is the document directory.

Consult the source code for a list template variables.

All pages will be initially rerendered on startup, and then the directory will be watched for changes in real time using the inotify API.