A library to parse shortcodes as used in Hugo and Nikola
.vscode | ||
spec | ||
src | ||
.gitignore | ||
LICENSE | ||
README.md | ||
shard.yml | ||
tests.c | ||
TODO.md |
Shortcodes
What it is
This is a parser for the shortcode spec as explained in the Hugo docs and used in Hugo and Nikola. Approximately.
I am implementing this for Nicolino.
It probably won't be 100% identical, but I'll try to make it as close as practical.
- Implemented in Ragel + C for performance
- Allocates no memory, because all strings are references to pieces of input.
What works
- Detect shortcodes with names
- Standalone and matched shortcodes
- Capture data between tags in matched shortcodes
- Capture arguments with and without names
- Capture values with and without quotes (with details, see TODO)
Building
You need Ragel and a C compiler.
Ragel is used to generate shortcodes.c
out of shortcodes.rl
.
As a convenience there is a generated shortcodes.c
in the repo,
Then:
cd src && make
To run tests:
crystal spec
Installation
-
Add the dependency to your
shard.yml
:dependencies: cr-discount: github: ralsina/shortcodes
-
Run
shards install
Usage
require "shortcodes"