a
    CgJ                     @   sn   d dl Z d dlmZmZ d dlmZ d dlmZmZm	Z	m
Z
 d dlmZ e dZe dZG dd	 d	ZdS )
    N)AnyOptional)	DOMEngine)HTMLElementPropsRenderableType)import_stringz(.)([A-Z][a-z]+)z([a-z0-9])([A-Z])c                   @   s   e Zd ZU dZdZdZdZdZdZe	e
d< eeedd	d
ZeeddddZedeee ee edddZeeedddZeeeedddZeeedddZeeedddZdS )DOMzE
    Component building API, abstracting the DOM implementation.
    z.draftjs_exporter.engines.html5lib.DOM_HTML5LIBz&draftjs_exporter.engines.lxml.DOM_LXMLz)draftjs_exporter.engines.string.DOMStringz6draftjs_exporter.engines.string_compat.DOMStringCompatNdom)camel_cased_strreturnc                 C   s(   t d| }td| }|ddS )Nz\1-\2z---)_first_cap_resub_all_cap_relowerreplace)r   Zsub2Zdashed_case_str r   S/var/www/lab.imftr.de/x/nb_venv/lib/python3.9/site-packages/draftjs_exporter/dom.pycamel_to_dash   s    zDOM.camel_to_dash)enginer   c                 C   s   t || _dS )z9
        Choose which DOM implementation to use.
        N)r	   r   )clsr   r   r   r   use   s    zDOM.use)type_propselt_childrenr   c           
      G   s  |s| j dS |du ri }t|r@t|d ttfr@|d }n|}t|dkrX|d n||d< t|rr||}ni }|dd |dd |dd |dd |d	d d
|v rt|d
 trdd |d
 	 D }d
||d
< |D ]L}|| du r
d||< || du r d||< || durt|| ||< q| j ||}|D ]}	|	dvrP| ||	 qP|dv r| j d}|S )a  
        Signature inspired by React.createElement.
        createElement(
          string/Component type,
          [dict props],
          [children ...]
        )
        https://facebook.github.io/react/docs/top-level-api.html#react.createelement
        fragmentNr      childrenblockblocksentityZinline_style_rangestylec                 S   s&   g | ]\}}t | d | dqS )z: ;)r
   r   ).0svr   r   r   
<listcomp>V   s   z&DOM.create_element.<locals>.<listcomp> FfalseTtrue)Nr)   )r   Z
create_taglen
isinstancelisttuplecallablepopdictitemsjoinstrappend_child)
r   r   r   r   r   elt
attributesruleskeychildr   r   r   create_element&   sF    




zDOM.create_element)markupr   c                 C   s   | j |S N)r   
parse_html)r   r=   r   r   r   r?   s   s    zDOM.parse_html)r7   r;   r   c                 C   s   | j ||S r>   )r   r6   )r   r7   r;   r   r   r   r6   w   s    zDOM.append_child)r7   r   c                 C   s   | j |S r>   )r   renderr   r7   r   r   r   r@   {   s    z
DOM.renderc                 C   s   | j |S r>   )r   render_debugrA   r   r   r   rB      s    zDOM.render_debug)NN)__name__
__module____qualname____doc__ZHTML5LIBZLXMLSTRINGZSTRING_COMPATr   r   __annotations__staticmethodr5   r   classmethodr   r   r   r   r   r<   r   r?   r   r6   r@   rB   r   r   r   r   r
      s6   
  Lr
   )retypingr   r   Zdraftjs_exporter.engines.baser   Zdraftjs_exporter.typesr   r   r   r   Z%draftjs_exporter.utils.module_loadingr	   compiler   r   r
   r   r   r   r   <module>   s   

