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}