# 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.