diff options
Diffstat (limited to 'django/utils/html.py')
| -rw-r--r-- | django/utils/html.py | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/django/utils/html.py b/django/utils/html.py index b04d6bc5ee..059767d394 100644 --- a/django/utils/html.py +++ b/django/utils/html.py @@ -4,6 +4,7 @@ import html import json import re import warnings +from collections import deque from collections.abc import Mapping from html.parser import HTMLParser from urllib.parse import parse_qsl, quote, unquote, urlencode, urlsplit, urlunsplit @@ -429,7 +430,7 @@ class Urlizer: # Strip all opening wrapping punctuation. middle = word.lstrip(self.wrapping_punctuation_openings) lead = word[: len(word) - len(middle)] - trail = "" + trail = deque() # Continue trimming until middle remains unchanged. trimmed_something = True @@ -442,7 +443,7 @@ class Urlizer: rstripped = middle.rstrip(closing) if rstripped != middle: strip = counts[closing] - counts[opening] - trail = middle[-strip:] + trail.appendleft(middle[-strip:]) middle = middle[:-strip] trimmed_something = True counts[closing] -= strip @@ -453,7 +454,7 @@ class Urlizer: else: rstripped = middle.rstrip(self.trailing_punctuation_chars_no_semicolon) if rstripped != middle: - trail = middle[len(rstripped) :] + trail + trail.appendleft(middle[len(rstripped) :]) middle = rstripped trimmed_something = True @@ -470,13 +471,14 @@ class Urlizer: # entity. recent_semicolon = middle[trail_start:].index(";") middle_semicolon_index = recent_semicolon + trail_start + 1 - trail = middle[middle_semicolon_index:] + trail + trail.appendleft(middle[middle_semicolon_index:]) middle = rstripped + middle[trail_start:middle_semicolon_index] else: - trail = middle[trail_start:] + trail + trail.appendleft(middle[trail_start:]) middle = rstripped trimmed_something = True + trail = "".join(trail) return lead, middle, trail @staticmethod |
