1 unstable release

0.1.0 Jun 22, 2023

#1670 in Text processing

Download history 23/week @ 2024-07-21 67/week @ 2024-07-28 20/week @ 2024-08-04 24/week @ 2024-08-11 15/week @ 2024-08-18 25/week @ 2024-08-25 21/week @ 2024-09-01 30/week @ 2024-09-08 21/week @ 2024-09-15 38/week @ 2024-09-22 24/week @ 2024-09-29 21/week @ 2024-10-06 6/week @ 2024-10-13 172/week @ 2024-10-20 130/week @ 2024-10-27 30/week @ 2024-11-03

339 downloads per month
Used in 2 crates (via markdown-it-heading-ancho…)

Apache-2.0

43KB

github-slugger

crates.io

Generate a slug just like GitHub does for markdown headings. It also ensures slugs are unique in the same way GitHub does it. The overall goal of this package is to emulate the way GitHub handles generating markdown heading anchors as close as possible. It is based on the github-slugger JavaScript package.

This project is not a markdown or HTML parser: passing alpha *bravo* charlie or alpha <em>bravo</em> charlie doesn’t work. Instead pass the plain text value of the heading: alpha bravo charlie.

Usage

let mut slugger = github_slugger::Slugger::default();

slugger.slug("foo")
// returns 'foo'

slugger.slug("foo")
// returns 'foo-1'

slugger.slug("bar")
// returns 'bar'

slugger.slug("foo")
// returns 'foo-2'

slugger.slug("Привет non-latin 你好")
// returns 'привет-non-latin-你好'

slugger.slug("😄 emoji")
// returns '-emoji'

slugger.reset()

slugger.slug("foo")
// returns 'foo'

Check tests/fixtures.json for more examples.

If you need, you can also use the underlying implementation which does not keep track of the previously slugged strings:

github_slugger::slug("foo bar baz")
// returns 'foo-bar-baz'

github_slugger::slug("foo bar baz")
// returns the same slug 'foo-bar-baz' because it does not keep track

Dependencies

~2.1–3MB
~54K SLoC