Comments
Patch
@@ -308,3 +308,29 @@
False
'''
return bool(_correctauthorformat.match(author))
+
+def person(author):
+ """Any text. Returns the name before an email address,
+ interpreting it as per RFC 5322.
+ >>> person(b'foo@bar')
+ 'foo'
+ >>> person(b'Foo Bar <foo@bar>')
+ 'Foo Bar'
+ >>> person(b'"Foo Bar" <foo@bar>')
+ 'Foo Bar'
+ >>> person(b'"Foo \"buz\" Bar" <foo@bar>')
+ 'Foo "buz" Bar'
+ >>> # The following are invalid, but do exist in real-life
+ ...
+ >>> person(b'Foo "buz" Bar <foo@bar>')
+ 'Foo "buz" Bar'
+ >>> person(b'"Foo Bar <foo@bar>')
+ 'Foo Bar'
+ """
+ if '@' not in author:
+ return author
+ f = author.find('<')
+ if f != -1:
+ return author[:f].strip(' "').replace('\\"', '"')
+ f = author.find('@')
+ return author[:f].replace('.', ' ')
@@ -290,31 +290,7 @@
@templatefilter('person')
def person(author):
- """Any text. Returns the name before an email address,
- interpreting it as per RFC 5322.
-
- >>> person(b'foo@bar')
- 'foo'
- >>> person(b'Foo Bar <foo@bar>')
- 'Foo Bar'
- >>> person(b'"Foo Bar" <foo@bar>')
- 'Foo Bar'
- >>> person(b'"Foo \"buz\" Bar" <foo@bar>')
- 'Foo "buz" Bar'
- >>> # The following are invalid, but do exist in real-life
- ...
- >>> person(b'Foo "buz" Bar <foo@bar>')
- 'Foo "buz" Bar'
- >>> person(b'"Foo Bar <foo@bar>')
- 'Foo Bar'
- """
- if '@' not in author:
- return author
- f = author.find('<')
- if f != -1:
- return author[:f].strip(' "').replace('\\"', '"')
- f = author.find('@')
- return author[:f].replace('.', ' ')
+ return stringutil.person(author)
@templatefilter('revescape')
def revescape(text):