<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;"># -*- coding: utf-8 -*-
import re
from types import UnicodeType

from django.template.defaultfilters import slugify

# default unicode character mapping ( you may not see some chars, leave as is )
char_map = {u'Ã€': 'A', u'Ã': 'A', u'Ã‚': 'A', u'Ãƒ': 'A', u'Ã„': 'Ae', u'Ã…': 'A', u'Ã†': 'A', u'Ä€': 'A', u'Ä„': 'A', u'Ä‚': 'A', u'Ã‡': 'C', u'Ä†': 'C', u'ÄŒ': 'C', u'Äˆ': 'C', u'ÄŠ': 'C', u'ÄŽ': 'D', u'Ä': 'D', u'Ãˆ': 'E', u'Ã‰': 'E', u'ÃŠ': 'E', u'Ã‹': 'E', u'Ä’': 'E', u'Ä˜': 'E', u'Äš': 'E', u'Ä”': 'E', u'Ä–': 'E', u'Äœ': 'G', u'Äž': 'G', u'Ä&nbsp;': 'G', u'Ä¢': 'G', u'Ä¤': 'H', u'Ä¦': 'H', u'ÃŒ': 'I', u'Ã': 'I', u'ÃŽ': 'I', u'Ã': 'I', u'Äª': 'I', u'Ä¨': 'I', u'Ä¬': 'I', u'Ä®': 'I', u'Ä°': 'I', u'Ä²': 'IJ', u'Ä´': 'J', u'Ä¶': 'K', u'Ä½': 'K', u'Ä¹': 'K', u'Ä»': 'K', u'Ä¿': 'K', u'Å': 'L', u'Ã‘': 'N', u'Åƒ': 'N', u'Å‡': 'N', u'Å…': 'N', u'ÅŠ': 'N', u'Ã’': 'O', u'Ã“': 'O', u'Ã”': 'O', u'Ã•': 'O', u'Ã–': 'Oe', u'Ã˜': 'O', u'ÅŒ': 'O', u'Å': 'O', u'ÅŽ': 'O', u'Å’': 'OE', u'Å”': 'R', u'Å˜': 'R', u'Å–': 'R', u'Åš': 'S', u'Åž': 'S', u'Åœ': 'S', u'È˜': 'S', u'Å&nbsp;': 'S', u'Å¤': 'T', u'Å¢': 'T', u'Å¦': 'T', u'Èš': 'T', u'Ã™': 'U', u'Ãš': 'U', u'Ã›': 'U', u'Ãœ': 'Ue', u'Åª': 'U', u'Å®': 'U', u'Å°': 'U', u'Å¬': 'U', u'Å¨': 'U', u'Å²': 'U', u'Å´': 'W', u'Å¶': 'Y', u'Å¸': 'Y', u'Ã': 'Y', u'Å¹': 'Z', u'Å»': 'Z', u'Å½': 'Z', u'Ã&nbsp;': 'a', u'Ã¡': 'a', u'Ã¢': 'a', u'Ã£': 'a', u'Ã¤': 'ae', u'Ä': 'a', u'Ä…': 'a', u'Äƒ': 'a', u'Ã¥': 'a', u'Ã¦': 'ae', u'Ã§': 'c', u'Ä‡': 'c', u'Ä': 'c', u'Ä‰': 'c', u'Ä‹': 'c', u'Ä': 'd', u'Ä‘': 'd', u'Ã¨': 'e', u'Ã©': 'e', u'Ãª': 'e', u'Ã«': 'e', u'Ä“': 'e', u'Ä™': 'e', u'Ä›': 'e', u'Ä•': 'e', u'Ä—': 'e', u'Æ’': 'f', u'Ä': 'g', u'ÄŸ': 'g', u'Ä¡': 'g', u'Ä£': 'g', u'Ä¥': 'h', u'Ä§': 'h', u'Ã¬': 'i', u'Ã­': 'i', u'Ã®': 'i', u'Ã¯': 'i', u'Ä«': 'i', u'Ä©': 'i', u'Ä­': 'i', u'Ä¯': 'i', u'Ä±': 'i', u'Ä³': 'ij', u'Äµ': 'j', u'Ä·': 'k', u'Ä¸': 'k', u'Å‚': 'l', u'Ä¾': 'l', u'Äº': 'l', u'Ä¼': 'l', u'Å€': 'l', u'Ã±': 'n', u'Å„': 'n', u'Åˆ': 'n', u'Å†': 'n', u'Å‰': 'n', u'Å‹': 'n', u'Ã²': 'o', u'Ã³': 'o', u'Ã´': 'o', u'Ãµ': 'o', u'Ã¶': 'oe', u'Ã¸': 'o', u'Å': 'o', u'Å‘': 'o', u'Å': 'o', u'Å“': 'oe', u'Å•': 'r', u'Å™': 'r', u'Å—': 'r', u'Å›': 's', u'Å¡': 's', u'Å¥': 't', u'Ã¹': 'u', u'Ãº': 'u', u'Ã»': 'u', u'Ã¼': 'ue', u'Å«': 'u', u'Å¯': 'u', u'Å±': 'u', u'Å­': 'u', u'Å©': 'u', u'Å³': 'u', u'Åµ': 'w', u'Ã¿': 'y', u'Ã½': 'y', u'Å·': 'y', u'Å¼': 'z', u'Åº': 'z', u'Å¾': 'z', u'ÃŸ': 'ss', u'Å¿': 'ss', u'Î‘': 'A', u'Î†': 'A', u'á¼ˆ': 'A', u'á¼‰': 'A', u'á¼Š': 'A', u'á¼‹': 'A', u'á¼Œ': 'A', u'á¼': 'A', u'á¼Ž': 'A', u'á¼': 'A', u'á¾ˆ': 'A', u'á¾‰': 'A', u'á¾Š': 'A', u'á¾‹': 'A', u'á¾Œ': 'A', u'á¾': 'A', u'á¾Ž': 'A', u'á¾': 'A', u'á¾¸': 'A', u'á¾¹': 'A', u'á¾º': 'A', u'á¾»': 'A', u'á¾¼': 'A', u'Î’': 'B', u'Î“': 'G', u'Î”': 'D', u'Î•': 'E', u'Îˆ': 'E', u'á¼˜': 'E', u'á¼™': 'E', u'á¼š': 'E', u'á¼›': 'E', u'á¼œ': 'E', u'á¼': 'E', u'á¿‰': 'E', u'á¿ˆ': 'E', u'Î–': 'Z', u'Î—': 'I', u'Î‰': 'I', u'á¼¨': 'I', u'á¼©': 'I', u'á¼ª': 'I', u'á¼«': 'I', u'á¼¬': 'I', u'á¼­': 'I', u'á¼®': 'I', u'á¼¯': 'I', u'á¾˜': 'I', u'á¾™': 'I', u'á¾š': 'I', u'á¾›': 'I', u'á¾œ': 'I', u'á¾': 'I', u'á¾ž': 'I', u'á¾Ÿ': 'I', u'á¿Š': 'I', u'á¿‹': 'I', u'á¿Œ': 'I', u'Î˜': 'TH', u'Î™': 'I', u'ÎŠ': 'I', u'Îª': 'I', u'á¼¸': 'I', u'á¼¹': 'I', u'á¼º': 'I', u'á¼»': 'I', u'á¼¼': 'I', u'á¼½': 'I', u'á¼¾': 'I', u'á¼¿': 'I', u'á¿˜': 'I', u'á¿™': 'I', u'á¿š': 'I', u'á¿›': 'I', u'Îš': 'K', u'Î›': 'L', u'Îœ': 'M', u'Î': 'N', u'Îž': 'KS', u'ÎŸ': 'O', u'ÎŒ': 'O', u'á½ˆ': 'O', u'á½‰': 'O', u'á½Š': 'O', u'á½‹': 'O', u'á½Œ': 'O', u'á½': 'O', u'á¿¸': 'O', u'á¿¹': 'O', u'Î&nbsp;': 'P', u'Î¡': 'R', u'á¿¬': 'R', u'Î£': 'S', u'Î¤': 'T', u'Î¥': 'Y', u'ÎŽ': 'Y', u'Î«': 'Y', u'á½™': 'Y', u'á½›': 'Y', u'á½': 'Y', u'á½Ÿ': 'Y', u'á¿¨': 'Y', u'á¿©': 'Y', u'á¿ª': 'Y', u'á¿«': 'Y', u'Î¦': 'F', u'Î§': 'X', u'Î¨': 'PS', u'Î©': 'O', u'Î': 'O', u'á½¨': 'O', u'á½©': 'O', u'á½ª': 'O', u'á½«': 'O', u'á½¬': 'O', u'á½­': 'O', u'á½®': 'O', u'á½¯': 'O', u'á¾¨': 'O', u'á¾©': 'O', u'á¾ª': 'O', u'á¾«': 'O', u'á¾¬': 'O', u'á¾­': 'O', u'á¾®': 'O', u'á¾¯': 'O', u'á¿º': 'O', u'á¿»': 'O', u'á¿¼': 'O', u'Î±': 'a', u'Î¬': 'a', u'á¼€': 'a', u'á¼': 'a', u'á¼‚': 'a', u'á¼ƒ': 'a', u'á¼„': 'a', u'á¼…': 'a', u'á¼†': 'a', u'á¼‡': 'a', u'á¾€': 'a', u'á¾': 'a', u'á¾‚': 'a', u'á¾ƒ': 'a', u'á¾„': 'a', u'á¾…': 'a', u'á¾†': 'a', u'á¾‡': 'a', u'á½°': 'a', u'á½±': 'a', u'á¾°': 'a', u'á¾±': 'a', u'á¾²': 'a', u'á¾³': 'a', u'á¾´': 'a', u'á¾¶': 'a', u'á¾·': 'a', u'Î²': 'b', u'Î³': 'g', u'Î´': 'd', u'Îµ': 'e', u'Î­': 'e', u'á¼': 'e', u'á¼‘': 'e', u'á¼’': 'e', u'á¼“': 'e', u'á¼”': 'e', u'á¼•': 'e', u'á½²': 'e', u'á½³': 'e', u'Î¶': 'z', u'Î·': 'i', u'Î®': 'i', u'á¼&nbsp;': 'i', u'á¼¡': 'i', u'á¼¢': 'i', u'á¼£': 'i', u'á¼¤': 'i', u'á¼¥': 'i', u'á¼¦': 'i', u'á¼§': 'i', u'á¾': 'i', u'á¾‘': 'i', u'á¾’': 'i', u'á¾“': 'i', u'á¾”': 'i', u'á¾•': 'i', u'á¾–': 'i', u'á¾—': 'i', u'á½´': 'i', u'á½µ': 'i', u'á¿‚': 'i', u'á¿ƒ': 'i', u'á¿„': 'i', u'á¿†': 'i', u'á¿‡': 'i', u'Î¸': 'th', u'Î¹': 'i', u'Î¯': 'i', u'ÏŠ': 'i', u'Î': 'i', u'á¼°': 'i', u'á¼±': 'i', u'á¼²': 'i', u'á¼³': 'i', u'á¼´': 'i', u'á¼µ': 'i', u'á¼¶': 'i', u'á¼·': 'i', u'á½¶': 'i', u'á½·': 'i', u'á¿': 'i', u'á¿‘': 'i', u'á¿’': 'i', u'á¿“': 'i', u'á¿–': 'i', u'á¿—': 'i', u'Îº': 'k', u'Î»': 'l', u'Î¼': 'm', u'Î½': 'n', u'Î¾': 'ks', u'Î¿': 'o', u'ÏŒ': 'o', u'á½€': 'o', u'á½': 'o', u'á½‚': 'o', u'á½ƒ': 'o', u'á½„': 'o', u'á½…': 'o', u'á½¸': 'o', u'á½¹': 'o', u'Ï€': 'p', u'Ï': 'r', u'á¿¤': 'r', u'á¿¥': 'r', u'Ïƒ': 's', u'Ï‚': 's', u'Ï„': 't', u'Ï…': 'y', u'Ï': 'y', u'Ï‹': 'y', u'Î°': 'y', u'á½': 'y', u'á½‘': 'y', u'á½’': 'y', u'á½“': 'y', u'á½”': 'y', u'á½•': 'y', u'á½–': 'y', u'á½—': 'y', u'á½º': 'y', u'á½»': 'y', u'á¿&nbsp;': 'y', u'á¿¡': 'y', u'á¿¢': 'y', u'á¿£': 'y', u'á¿¦': 'y', u'á¿§': 'y', u'Ï†': 'f', u'Ï‡': 'x', u'Ïˆ': 'ps', u'Ï‰': 'o', u'ÏŽ': 'o', u'á½&nbsp;': 'o', u'á½¡': 'o', u'á½¢': 'o', u'á½£': 'o', u'á½¤': 'o', u'á½¥': 'o', u'á½¦': 'o', u'á½§': 'o', u'á¾&nbsp;': 'o', u'á¾¡': 'o', u'á¾¢': 'o', u'á¾£': 'o', u'á¾¤': 'o', u'á¾¥': 'o', u'á¾¦': 'o', u'á¾§': 'o', u'á½¼': 'o', u'á½½': 'o', u'á¿²': 'o', u'á¿³': 'o', u'á¿´': 'o', u'á¿¶': 'o', u'á¿·': 'o', u'Â¨': '', u'Î…': '', u'á¾¿': '', u'á¿¾': '', u'á¿': '', u'á¿': '', u'á¿Ž': '', u'á¿ž': '', u'á¿': '', u'á¿Ÿ': '', u'á¿€': '', u'á¿': '', u'Î„': '', u'á¿®': '', u'á¿¯': '', u'á¿­': '', u'Íº': '', u'á¾½': '', u'Ð': 'A', u'Ð‘': 'B', u'Ð’': 'V', u'Ð“': 'G', u'Ð”': 'D', u'Ð•': 'E', u'Ð': 'E', u'Ð–': 'ZH', u'Ð—': 'Z', u'Ð˜': 'I', u'Ð™': 'I', u'Ðš': 'K', u'Ð›': 'L', u'Ðœ': 'M', u'Ð': 'N', u'Ðž': 'O', u'ÐŸ': 'P', u'Ð&nbsp;': 'R', u'Ð¡': 'S', u'Ð¢': 'T', u'Ð£': 'U', u'Ð¤': 'F', u'Ð¥': 'KH', u'Ð¦': 'TS', u'Ð§': 'CH', u'Ð¨': 'SH', u'Ð©': 'SHCH', u'Ð«': 'Y', u'Ð­': 'E', u'Ð®': 'YU', u'Ð¯': 'YA', u'Ð°': 'A', u'Ð±': 'B', u'Ð²': 'V', u'Ð³': 'G', u'Ð´': 'D', u'Ðµ': 'E', u'Ñ‘': 'E', u'Ð¶': 'ZH', u'Ð·': 'Z', u'Ð¸': 'I', u'Ð¹': 'I', u'Ðº': 'K', u'Ð»': 'L', u'Ð¼': 'M', u'Ð½': 'N', u'Ð¾': 'O', u'Ð¿': 'P', u'Ñ€': 'R', u'Ñ': 'S', u'Ñ‚': 'T', u'Ñƒ': 'U', u'Ñ„': 'F', u'Ñ…': 'KH', u'Ñ†': 'TS', u'Ñ‡': 'CH', u'Ñˆ': 'SH', u'Ñ‰': 'SHCH', u'Ñ‹': 'Y', u'Ñ': 'E', u'ÑŽ': 'YU', u'Ñ': 'YA', u'Ðª': '', u'ÑŠ': '', u'Ð¬': '', u'ÑŒ': '', u'Ã°': 'd', u'Ã': 'D', u'Ã¾': 'th', u'Ãž': 'TH',
            u'áƒ': 'a', u'áƒ‘': 'b', u'áƒ’': 'g', u'áƒ“': 'd', u'áƒ”': 'e', u'áƒ•': 'v', u'áƒ–': 'z', u'áƒ—': 't', u'áƒ˜': 'i', u'áƒ™': 'k', u'áƒš': 'l', u'áƒ›': 'm', u'áƒœ': 'n', u'áƒ': 'o', u'áƒž': 'p', u'áƒŸ': 'zh', u'áƒ&nbsp;': 'r', u'áƒ¡': 's', u'áƒ¢': 't', u'áƒ£': 'u', u'áƒ¤': 'p', u'áƒ¥': 'k', u'áƒ¦': 'gh', u'áƒ§': 'q', u'áƒ¨': 'sh', u'áƒ©': 'ch', u'áƒª': 'ts', u'áƒ«': 'dz', u'áƒ¬': 'ts', u'áƒ­': 'ch', u'áƒ®': 'kh', u'áƒ¯': 'j', u'áƒ°': 'h' }

def replace_char(m):
    char = m.group()
    if char_map.has_key(char):
        return char_map[char]
    else:
        return char

def slughifi(value, do_slugify=True, overwrite_char_map={}):
    """
        High Fidelity slugify - slughifi.py, v 0.1

        Examples :

        &gt;&gt;&gt; text = 'C\'est dÃ©jÃ&nbsp; l\'Ã©tÃ©.'

        &gt;&gt;&gt; slughifi(text)
        'cest-deja-lete'

        &gt;&gt;&gt; slughifi(text, overwrite_char_map={u'\'': '-',})
        'c-est-deja-l-ete'

        &gt;&gt;&gt; slughifi(text, do_slugify=False)
        "C'est deja l'ete."

        # Normal slugify removes accented characters
        &gt;&gt;&gt; slugify(text)
        'cest-dj-lt'

    """

    # unicodification
    if type(value) != UnicodeType:
        value = unicode(value, 'utf-8', 'ignore')

    # overwrite chararcter mapping
    char_map.update(overwrite_char_map)

    # try to replace chars
    value = re.sub('[^a-zA-Z0-9\\s\\-]{1}', replace_char, value)

    # apply django default slugify
    if do_slugify:
        value = slugify(value)

    return value.encode('ascii', 'ignore')

</pre></body></html>