main
1// This is a port of https://github.com/Flet/github-slugger
2
3#import "to-string.typ": to-string
4
5#let reg = regex(
6 "[[\p{No}\p{Pe}\p{Pf}\p{Pi}\p{Ps}\p{Po}\p{Pd}\p{S}\p{C}\p{Z}\p{Cn}]--[\p{Alphabetic}\ \-]]",
7)
8
9#let slugify(content, sep: "-") = {
10 lower(to-string(content)).replace(reg, "").replace(" ", sep)
11}
12
13#let slugger(contents, sep: "-") = {
14 let record = (:)
15 let result = ()
16 for content in contents {
17 let original-slug = slugify(content, sep: sep)
18 let candidate = original-slug
19 while candidate in record {
20 let count = record.at(original-slug, default: 0)
21 count = count + 1
22 record.insert(original-slug, count)
23 candidate = original-slug + sep + str(count)
24 }
25 record.insert(candidate, 0)
26 result.push(candidate)
27 }
28 result
29}