diff --git a/system/ui/widgets/html_render.py b/system/ui/widgets/html_render.py index b7e28a8d5..7d90d5692 100644 --- a/system/ui/widgets/html_render.py +++ b/system/ui/widgets/html_render.py @@ -31,6 +31,10 @@ class ElementType(Enum): TAG_NAMES = '|'.join([t.value for t in ElementType]) START_TAG_RE = re.compile(f'<({TAG_NAMES})>') END_TAG_RE = re.compile(f'') +COMMENT_RE = re.compile(r'', flags=re.DOTALL) +DOCTYPE_RE = re.compile(r']*>') +HTML_BODY_TAGS_RE = re.compile(r']*>') +TOKEN_RE = re.compile(r']+>|<[^>]+>|[^<\s]+') def is_tag(token: str) -> tuple[bool, bool, ElementType | None]: @@ -104,14 +108,14 @@ class HtmlRenderer(Widget): self._cached_width = -1 # Remove HTML comments - html_content = re.sub(r'', '', html_content, flags=re.DOTALL) + html_content = COMMENT_RE.sub('', html_content) # Remove DOCTYPE, html, head, body tags but keep their content - html_content = re.sub(r']*>', '', html_content) - html_content = re.sub(r']*>', '', html_content) + html_content = DOCTYPE_RE.sub('', html_content) + html_content = HTML_BODY_TAGS_RE.sub('', html_content) # Parse HTML - tokens = re.findall(r']+>|<[^>]+>|[^<\s]+', html_content) + tokens = TOKEN_RE.findall(html_content) def close_tag(): nonlocal current_content