Initial commit
This commit is contained in:
54
env/lib/python3.10/site-packages/draftjs_exporter/engines/lxml.py
vendored
Normal file
54
env/lib/python3.10/site-packages/draftjs_exporter/engines/lxml.py
vendored
Normal file
@@ -0,0 +1,54 @@
|
||||
import re
|
||||
from typing import Optional
|
||||
|
||||
from draftjs_exporter.engines.base import Attr, DOMEngine
|
||||
from draftjs_exporter.types import HTML, Tag
|
||||
|
||||
try:
|
||||
from lxml import etree, html
|
||||
except ImportError:
|
||||
pass
|
||||
|
||||
NSMAP = {"xlink": "http://www.w3.org/1999/xlink"}
|
||||
|
||||
RENDER_RE = re.compile(r"</?fragment>")
|
||||
|
||||
|
||||
class DOM_LXML(DOMEngine):
|
||||
"""
|
||||
lxml implementation of the DOM API.
|
||||
"""
|
||||
|
||||
@staticmethod
|
||||
def create_tag(type_: Tag, attr: Optional[Attr] = None) -> etree.Element:
|
||||
nsmap = None
|
||||
|
||||
if attr:
|
||||
if "xlink:href" in attr:
|
||||
attr[f"{{{NSMAP['xlink']}}}href"] = attr.pop("xlink:href")
|
||||
nsmap = NSMAP
|
||||
|
||||
return etree.Element(type_, attrib=attr, nsmap=nsmap)
|
||||
|
||||
@staticmethod
|
||||
def parse_html(markup: HTML) -> etree.Element:
|
||||
return html.fromstring(markup)
|
||||
|
||||
@staticmethod
|
||||
def append_child(elt: etree.Element, child: etree.Element) -> None:
|
||||
if hasattr(child, "tag"):
|
||||
elt.append(child)
|
||||
else:
|
||||
c = etree.Element("fragment")
|
||||
c.text = child
|
||||
elt.append(c)
|
||||
|
||||
@staticmethod
|
||||
def render(elt: etree.Element) -> HTML:
|
||||
return RENDER_RE.sub(
|
||||
"", etree.tostring(elt, method="html", encoding="unicode")
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
def render_debug(elt: etree.Element) -> HTML:
|
||||
return etree.tostring(elt, method="html", encoding="unicode")
|
||||
Reference in New Issue
Block a user