Add a variant of cleanBin that escapes newlines and tabs.

Use this to fix the hex display option.
This commit is contained in:
Aldo Cortesi 2012-03-27 11:25:50 +13:00
parent 690f797da2
commit e9ac4bef20
2 changed files with 20 additions and 3 deletions

View File

@ -54,11 +54,18 @@ def isXML(s):
return False
def cleanBin(s):
def cleanBin(s, fixspacing=False):
"""
Cleans binary data to make it safe to display. If fixspacing is True,
tabs, newlines and so forth will be maintained, if not, they will be
replaced with a placeholder.
"""
parts = []
for i in s:
o = ord(i)
if (o > 31 and o < 127) or i in "\n\r\t":
if (o > 31 and o < 127):
parts.append(i)
elif i in "\n\r\t" and not fixspacing:
parts.append(i)
else:
parts.append(".")
@ -147,7 +154,7 @@ def hexdump(s):
x += " "
x += " ".join(" " for i in range(16 - len(part)))
parts.append(
(o, x, cleanBin(part))
(o, x, cleanBin(part, True))
)
return parts

View File

@ -224,7 +224,17 @@ class u_parse_content_type(libpry.AutoTree):
assert v == ('text', 'html', {'charset': 'UTF-8'})
class u_cleanBin(libpry.AutoTree):
def test_simple(self):
assert utils.cleanBin("one") == "one"
assert utils.cleanBin("\00ne") == ".ne"
assert utils.cleanBin("\nne") == "\nne"
assert utils.cleanBin("\nne", True) == ".ne"
tests = [
u_cleanBin(),
u_parse_content_type(),
uformat_timestamp(),
uisBin(),