# HG changeset patch # User Martin Geisler # Date 2010-06-19 14:52:25 # Node ID db957a72fbd7c29fdfcefdf5feeb4338d4fd8404 # Parent 181936ec9bfba23192fc2b1895a6828fb14f30e3 i18n: patch polib.unescape Patch submitted to upstream as rev b9174a342092 in http://bitbucket.org/mg/polib/ diff --git a/i18n/polib.py b/i18n/polib.py --- a/i18n/polib.py +++ b/i18n/polib.py @@ -42,6 +42,7 @@ import codecs import struct import textwrap import types +import re default_encoding = 'utf-8' @@ -243,18 +244,21 @@ def unescape(st): '\\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 {{{