#coding:utf8

import re
import warnings
import locale

iecPattern = re.compile(r"\IeC {\\(.*?)}")
replacePattern = {
     '`A': 'À',
     '`a': 'à',
     '^a': 'â',
     'oe': 'œ',
     "'e" : 'é',
     "`e" : 'è',
     "^e" : 'ê',
     '"e' : 'ë',
     "'E" : 'É',
     "`E" : 'È',
     "'o" : 'ó',
     "^o" : 'ô',
     r'"\i' : 'i',
     r'^\i' : 'i',
     '"u' : 'ü',
     "c C" : 'Ç',
     "c c" : 'ç',
}

def sortkey(value):
    '''
    From a title, return something usable for sorting. It handles locale (but
    don't forget to call locale.setlocale(locale.LC_ALL, '')). It also try to
    handle the sort with crappy latex escape sequences. Some chars may not be
    handled by this function, so add them to *replacePattern* dictionnary.
    '''
    def repl(match):
        try:
            return replacePattern[match.group(1).strip()]
        except KeyError:
            warnings.warn("Error, no match to replace %s in %s. You should add it in the coresponding table in title_sort.py" % (match.group(0), match.group(1)))

    return locale.strxfrm(iecPattern.sub(repl, value).replace(' ', 'A'))