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}