docs: def translit(src, table=UkrainianKMU, preserve_case=True):
      u""" Transliterates given unicode `src` text
      to transliterated variant according to a given transliteration table.
      Official ukrainian transliteration is used by default
  
      :param src: string to transliterate
      :type src: str
      :param table: transliteration table
      :type table: transliteration table object
      :param preserve_case: convert result to uppercase if source is uppercased
      (see the example below for the difference that flag makes)
      :type preserve_case: bool
      :returns: transliterated string
      :rtype: str
  
  
      >>> print(translit(u"Дмитро Згуровский"))
      Dmytro Zghurovskyi
      >>> print(translit(u"Дмитро ЗГуровский"))
      Dmytro ZGhurovskyi
      >>> print(translit(u"Дмитро згуровский"))
      Dmytro zghurovskyi
      >>> print(translit(u"Євген Петренко"))
      Yevhen Petrenko
      >>> print(translit(u"Петренко Євген"))
      Petrenko Yevhen
      >>> print(translit(u"Петренко.Євген"))
      Petrenko.Yevhen
      >>> print(translit(u"Петренко,Євген"))
      Petrenko,Yevhen
      >>> print(translit(u"Петренко/Євген"))
      Petrenko/Yevhen
      >>> print(translit(u"Євгєн"))
      Yevhien
      >>> print(translit(u"Яготин"))
      Yahotyn
      >>> print(translit(u"Ярошенко"))
      Yaroshenko
      >>> print(translit(u"Костянтин"))
      Kostiantyn
      >>> print(translit(u"Знам'янка"))
      Znamianka
      >>> print(translit(u"Знам’янка"))
      Znamianka
      >>> print(translit(u"Знам’янка"))
      Znamianka
      >>> print(translit(u"Феодосія"))
      Feodosiia
      >>> print(translit(u"Ньютон"))
      Niuton
      >>> print(translit(u"піранья"))
      pirania
      >>> print(translit(u"кур'єр"))
      kurier
      >>> print(translit(u"ЗГУРОВСЬКИЙ"))
      ZGHUROVSKYI
      >>> print(translit(u"ЗГУРОВСЬКИЙ", preserve_case=False))
      ZGhUROVSKYI
  
      >>> print(translit(u"Дмитро Згуровский", UkrainianSimple))
      Dmytro Zhurovskyj
      >>> print(translit(u"Дмитро Щуровский", UkrainianWWS))
      Dmytro Ščurovskyj
      >>> print(translit(u"Дмитро Щуровский", UkrainianBritish))
      Dmȳtro Shchurovskȳĭ
      >>> print(translit(u"Дмитро Щуровский", UkrainianFrench))
      Dmytro Chtchourovskyy
      >>> print(translit(u"Дмитро Щуровский", UkrainianGerman))
      Dmytro Schtschurowskyj
      >>> print(translit(u"Дмитро Щуровский", UkrainianGOST1971))
      Dmitro Shhurovskij
  
      >>> print(translit(u"Варенье", RussianInternationalPassport))
      Varen'ye
      >>> print(translit(u"Новьё", RussianInternationalPassport))
      Nov'ye
  
      >>> print(translit(u"Варенье", RussianDriverLicense))
      Varen'ye
      >>> print(translit(u"Подъезд", RussianDriverLicense))
      Pod'yezd
      >>> print(translit(u"Новьё", RussianDriverLicense))
      Nov'yo
      >>> print(translit(u"Подъёб", RussianDriverLicense))
      Pod'yob
      >>> print(translit(u"Ель", RussianDriverLicense))
      Yel'
      >>> print(translit(u"Ёж", RussianDriverLicense))
      Yozh
  
      >>> print(translit(u"Щёки", RussianDriverLicense))
      Shcheki
      >>> print(translit(u"Соловьи", RussianDriverLicense))
      Solov'yi
      """
  
      src = text_type(src)
      src_is_upper = src.isupper()
  
      if hasattr(table, "DELETE_PATTERN"):
          src = table.DELETE_PATTERN.sub(u"", src)
  
      if hasattr(table, "PATTERN1"):
          src = table.PATTERN1.sub(lambda x: table.SPECIAL_CASES[x.group()], src)
  
      if hasattr(table, "PATTERN2"):
          src = table.PATTERN2.sub(lambda x: table.FIRST_CHARACTERS[x.group()],
                                   src)
      res = src.translate(table.MAIN_TRANSLIT_TABLE)
  
      if src_is_upper and preserve_case:
          return res.upper()
      else:
          return res