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, record: (:), sep: "-") = {
14 if type(content) != array {
15 contents = (contents,)
16 }
17 let result = ()
18 for content in contents {
19 let original-slug = slugify(content, sep: sep)
20 let candidate = original-slug
21 while candidate in record {
22 let count = record.at(original-slug, default: 0)
23 count = count + 1
24 record.insert(original-slug, count)
25 candidate = original-slug + sep + str(count)
26 }
27 record.insert(candidate, 0)
28 result.push(candidate)
29 }
30 return (result, record)
31}