DOT = ValueTerminal('.', 'dot')
ListSeparator = ValueTerminal(',', 'list-separator')
ListSeparator.as_ew_allowed = False
+ListSeparator.syntactic_break = False
RouteComponentMarker = ValueTerminal('@', 'route-component-marker')
#
if not hasattr(part, 'encode'):
# It's not a Terminal, do each piece individually.
parts = list(part) + parts
- else:
+ want_encoding = False
+ continue
+ elif part.as_ew_allowed:
# It's a terminal, wrap it as an encoded word, possibly
# combining it with previously encoded words if allowed.
if (last_ew is not None and
last_ew = _fold_as_ew(tstr, lines, maxlen, last_ew,
part.ew_combine_allowed, charset)
last_charset = charset
- want_encoding = False
- continue
+ want_encoding = False
+ continue
+ else:
+ # It's a terminal which should be kept non-encoded
+ # (e.g. a ListSeparator).
+ last_ew = None
+ want_encoding = False
+ # fall through
+
if len(tstr) <= maxlen - len(lines[-1]):
lines[-1] += tstr
continue
' =?utf-8?q?bei=C3=9Ft_bei=C3=9Ft?= <biter@example.com>\n')
def test_address_list_with_list_separator_after_fold(self):
- to = '0123456789' * 8 + '@foo, ä <foo@bar>'
+ a = 'x' * 66 + '@example.com'
+ to = f'{a}, "Hübsch Kaktus" <beautiful@example.com>'
self._test(parser.get_address_list(to)[0],
- '0123456789' * 8 + '@foo,\n =?utf-8?q?=C3=A4?= <foo@bar>\n')
+ f'{a},\n =?utf-8?q?H=C3=BCbsch?= Kaktus <beautiful@example.com>\n')
+
+ a = '.' * 79
+ to = f'"{a}" <xyz@example.com>, "Hübsch Kaktus" <beautiful@example.com>'
+ self._test(parser.get_address_list(to)[0],
+ f'{a}\n'
+ ' <xyz@example.com>, =?utf-8?q?H=C3=BCbsch?= Kaktus '
+ '<beautiful@example.com>\n')
# XXX Need tests with comments on various sides of a unicode token,
# and with unicode tokens in the comments. Spaces inside the quotes