Commit e60558c9 authored by Guido van Rossum's avatar Guido van Rossum

Speed-up unquote(), inspired by post from Daniel Walton.

parent 9e2881df
...@@ -854,25 +854,23 @@ def splitgophertype(selector): ...@@ -854,25 +854,23 @@ def splitgophertype(selector):
return selector[1], selector[2:] return selector[1], selector[2:]
return None, selector return None, selector
_quoteprog = None
def unquote(s): def unquote(s):
global _quoteprog mychr = chr
if _quoteprog is None: myatoi = string.atoi
import re list = string.split(s, '%')
_quoteprog = re.compile('%[0-9a-fA-F][0-9a-fA-F]') res = [list[0]]
myappend = res.append
i = 0 del list[0]
n = len(s) for item in list:
res = [] if item[1:2]:
while 0 <= i < n: try:
match = _quoteprog.search(s, i) myappend(mychr(myatoi(item[:2], 16))
if not match: + item[2:])
res.append(s[i:]) except:
break myappend(item)
j = match.start(0) else:
res.append(s[i:j] + chr(string.atoi(s[j+1:j+3], 16))) myappend(item)
i = j+3 return string.join(res, "")
return string.joinfields(res, '')
def unquote_plus(s): def unquote_plus(s):
if '+' in s: if '+' in s:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment