soupault 1.9.0 release

Message ID
DKIM signature
Download raw message
Soupault 1.9.0 is available for download from
https://files.baturin.org/software/soupault/1.9.0/ and can also be
installed from opam.

Release announcement is also in the project blog:

## Verifying release integrity

Since 1.9.0, soupault uses minisign
(https://jedisct1.github.io/minisign/) rather than PGP for release signing.
If you are new to signify/minisign, you should read "signify: Securing
OpenBSD From Us To You" paper by Ted Unangst
There's much less overhead compared to PGP, and the keys are much
shorter due to less metadata embedded in them and use of
newer elliptic curve algorithms.

You can verify the releases using this key:

For example:

minisign -Vm soupault-1.9.0-win32.zip -P

If you have any doubts about the authenticity of the key, feel free to
contact me directly.

## New features

### `--index-only`

There's now a `--index-only` option that makes soupault stop at metadata
extraction. It just dumps the index data
to a JSON file specified in the `dump_json` option, but doesn't generate
any pages.

It will run widgets that are supposed to run before the index extraction
though, if you've configured the
`extract_after_widgets` option (the reading time plugin on this site is
a good example of why this may be needed—that widget
must run before metadata extraction so that the reading time can appear
in the blog index page).

There are two use cases for this. First, it may be useful for people who
want to generate an index page or an RSS/Atom/JSONFeed
for a handwritten website. Second, it can be a step in a TeX-like
workflow. Since soupault doesn't create page files on principle,
the intended way to generate a blog archive or a list of all pages is to
export the metadata to JSON and run it through
a script that makes pages, then run soupault again to assemble a
complete website. With `--index-only`, you can make
that process faster.

It's also possible to limit index extraction to certain sections or
pages, just like with widgets.

### Multiple selectors for preprocess_element widgets

It's now possible to use a list of selectors with preprocess_element
widgets, to avoid redundancy in the configs.

  widget = "preprocess_element"
  selector = ["code", "pre"]

### New plugin functions

It's now possible to extend soupault with plugins, external programs, or
plugins that run external programs.

Specifically, there are now Sys.run_program and Sys.get_program_output
functions that you
can use in your plugins. It doesn't add much more expressive power, but
it can make some things easier.
For example, I use it in a <a href="/plugins/#git-timestamp">plugin</a>
that takes a page modification date from git unless that page has a
timestamp in `<time id="last-modified">`.

There are also functions for easily accessing children, descendants, and
siblings of an element, functions for deleting and cloning element content,
and a few more convenience functions.

### Bug fixes

The `title` widget correctly removes all HTML tags from the title string
(if there are any). It also doesn't add extra whitespace anymore.
Both fixes were made by Thomas Letan.

CSS selector parse errors are now failed gracefully.
Thomas Letan
Message ID
<f635f003-d5bb-b099-33fe-fa8b0964d3df@baturin.org> (view parent)
DKIM signature
Download raw message
Congratulation on this new release!
So far so good, it works like a charm :).