strings.py 817 B

12345678910111213141516171819202122232425262728293031323334
  1. from __future__ import absolute_import, unicode_literals
  2. import string
  3. from jaraco.text import FoldedCase
  4. class IRCFoldedCase(FoldedCase):
  5. """
  6. A version of FoldedCase that honors the IRC specification for lowercased
  7. strings (RFC 1459).
  8. >>> IRCFoldedCase('Foo^').lower()
  9. 'foo~'
  10. >>> IRCFoldedCase('[this]') == IRCFoldedCase('{THIS}')
  11. True
  12. >>> IRCFoldedCase().lower()
  13. ''
  14. """
  15. translation = dict(zip(
  16. map(ord, string.ascii_uppercase + r"[]\^"),
  17. map(ord, string.ascii_lowercase + r"{}|~"),
  18. ))
  19. def lower(self):
  20. return (
  21. self.translate(self.translation) if self
  22. # bypass translate, which returns self
  23. else super(IRCFoldedCase, self).lower()
  24. )
  25. def lower(str):
  26. return IRCFoldedCase(str).lower()