summaryrefslogtreecommitdiff
path: root/django/utils/html.py
diff options
context:
space:
mode:
Diffstat (limited to 'django/utils/html.py')
-rw-r--r--django/utils/html.py12
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