# text.slugify
The output alphabet is exactly a-z, 0-9 and the hyphen. Runs of anything else
collapse to one hyphen, and there is never a leading or trailing one.
Transliteration covers one closed, nameable set: every letter of the Latin-1
supplement (U+00C0 to U+00FF) plus the seven letters Windows-1252 adds (OE, oe,
S-caron, s-caron, Z-caron, z-caron, Y-diaeresis). Diacritics are dropped rather
than expanded, so a-umlaut becomes a, not ae - the convention every URL slug in
the wild follows. The exceptions are the letters that are not accented vowels at
all: sharp s becomes ss, ae-ligature becomes ae, oe-ligature becomes oe, thorn
becomes th.
Anything outside that set is dropped, not guessed: Greek, Cyrillic, CJK, emoji
and every Latin Extended letter beyond the seven above become separators. A
title written entirely in one of those scripts slugifies to the empty string,
which is returned rather than raised - the caller knows what its fallback is (an
id, a date, a hash) and this function does not.
The map is spelled out character by character rather than left to a Unicode
normalisation library, because that is the only way three languages with three
different Unicode stacks can be pinned to the same output by one test vector.