3 unstable releases

0.2.0 Aug 3, 2023
0.1.1 Jun 21, 2023
0.1.0 Jun 17, 2023

#3 in #footnotes

Download history 401/week @ 2025-08-18 820/week @ 2025-08-25 924/week @ 2025-09-01 1277/week @ 2025-09-08 929/week @ 2025-09-15 253/week @ 2025-09-22 294/week @ 2025-09-29 494/week @ 2025-10-06 442/week @ 2025-10-13 347/week @ 2025-10-20 272/week @ 2025-10-27 338/week @ 2025-11-03 334/week @ 2025-11-10 242/week @ 2025-11-17 277/week @ 2025-11-24 452/week @ 2025-12-01

1,309 downloads per month
Used in 7 crates (via vitrine)

Apache-2.0

30KB
468 lines

markdown-it-footnote.rs

crates.io

A markdown-it.rs plugin to process footnotes.

It is based on the pandoc definition:

Normal footnote:

Here is a footnote reference,[^1] and another.[^longnote]

Here is an inline note.^[my note is here!]

[^1]: Here is the footnote.

[^longnote]: Here's one with multiple blocks.

    Subsequent paragraphs are indented to show that they
belong to the previous footnote.

See the tests for more examples.

Usage

To load the full plugin:

let parser = &mut markdown_it::MarkdownIt::new();
markdown_it::plugins::cmark::add(parser);

markdown_it_footnote::add(parser);

let ast  = parser.parse("Example^[my note]");
let html = ast.render();

Alternatively, you can load the separate components:

let parser = &mut markdown_it::MarkdownIt::new();
markdown_it::plugins::cmark::add(parser);

markdown_it_footnote::definitions::add(md);
markdown_it_footnote::references::add(md);
markdown_it_footnote::inline::add(md);
markdown_it_footnote::collect::add(md);
markdown_it_footnote::back_refs::add(md);

Which have the following roles:

  • definitions: parse footnote definitions, e.g. [^1]: foo
  • references: parse footnote references, e.g. [^1]
  • inline: parse inline footnotes, e.g. ^[foo]
  • collect: collect footnote definitions (removing duplicate/unreferenced ones) and move them to be the last child of the root node.
  • back_refs: add anchor(s) to footnote definitions, with links back to the reference(s)

Dependencies

~6–18MB
~220K SLoC