diff -r 181936ec9bfb -r db957a72fbd7 i18n/polib.py --- a/i18n/polib.py Thu Jun 17 20:10:34 2010 -0300 +++ b/i18n/polib.py Sat Jun 19 16:52:25 2010 +0200 @@ -42,6 +42,7 @@ import struct import textwrap import types +import re default_encoding = 'utf-8' @@ -243,18 +244,21 @@ '\\n' >>> unescape(r'\\\\n') '\\\\n' + >>> unescape(r'\\\\n\\n') + '\\\\n\\n' """ - raw_strings = [ - (r'\\n', r'\n', '\n'), - (r'\\r', r'\r', '\r'), - (r'\\t', r'\t', '\t'), - ] - for a, b, c in raw_strings: - if a in st: - st = st.replace(a, b) - else: - st = st.replace(b, c) - return st.replace(r'\"', '"').replace(r'\\', '\\') + def unescape_repl(m): + m = m.group(1) + if m == 'n': + return '\n' + if m == 't': + return '\t' + if m == 'r': + return '\r' + if m == '\\': + return '\\' + return m # handles escaped double quote + return re.sub(r'\\(\\|n|t|r|")', unescape_repl, st) # }}} # class _BaseFile {{{