added RaG

This commit is contained in:
2026-09-09 13:03:41 +03:00
parent e2ee6c2a98
commit df72dc4b8e
27 changed files with 3291 additions and 70 deletions
@@ -0,0 +1,32 @@
"""HTML helpers for ESPD rich-text content."""
from __future__ import annotations
import re
from html import unescape
def html_to_plain(html: str) -> str:
if not html:
return ""
text = html
text = re.sub(r"(?i)<br\s*/?>", "\n", text)
text = re.sub(r"(?i)</p\s*>", "\n\n", text)
text = re.sub(r"(?i)</h[1-6]\s*>", "\n\n", text)
text = re.sub(r"(?i)</li\s*>", "\n", text)
text = re.sub(r"(?i)<li[^>]*>", "• ", text)
text = re.sub(r"(?i)</tr\s*>", "\n", text)
text = re.sub(r"(?i)</td\s*>", "\t", text)
text = re.sub(r"<[^>]+>", "", text)
text = unescape(text)
text = re.sub(r"\n{3,}", "\n\n", text)
return text.strip()
def plain_to_html(text: str) -> str:
if not text:
return ""
parts = [p.strip() for p in text.replace("\r\n", "\n").split("\n\n") if p.strip()]
if not parts:
parts = [text.strip()] if text.strip() else []
return "".join(f"<p>{p.replace(chr(10), '<br/>')}</p>" for p in parts)