o
    	'f                     @  s   d Z ddlmZ ddlmZmZmZmZ ddlm	Z	 ddl
mZmZ er*ddlmZ e	 Ze	jddd	Zee dddZdddZ		dd ddZdS )!zXML parser for python-docx.    )annotations)TYPE_CHECKINGDictTypecast)etree)NamespacePrefixedTagnsmap)BaseOxmlElementTF)remove_blank_textresolve_entitiesxmlstrreturn'BaseOxmlElement'c                 C  s   t dt| tS )zRoot lxml element obtained by parsing XML character string `xml`.

    The custom parser is used, so custom element classes are produced for elements in
    `xml` that have them.
    r
   )r   r   
fromstringoxml_parser)r    r   H/home/ubuntu/flask/venv/lib/python3.10/site-packages/docx/oxml/parser.py	parse_xml   s   r   tagclsType['BaseOxmlElement']c                 C  s(   |  d\}}tt| }|||< dS )zRegister an lxml custom element-class to use for `tag`.

    A instance of `cls` to be constructed when the oxml parser encounters an element
    with matching `tag`. `tag` is a string of the form `nspfx:tagroot`, e.g.
    `'w:document'`.
    :N)splitelement_class_lookupget_namespacer	   )r   r   nspfxtagroot	namespacer   r   r   register_element_cls   s   r    N
nsptag_strattrsDict[str, str] | Nonensdeclsr
   c                 C  s(   t | }|du r|j}tj|j||dS )al  Return a 'loose' lxml element having the tag specified by `nsptag_str`.

    The tag in `nsptag_str` must contain the standard namespace prefix, e.g. `a:tbl`.
    The resulting element is an instance of the custom element class for this tag name
    if one is defined. A dictionary of attribute values may be provided as `attrs`; they
    are set if present. All namespaces defined in the dict `nsdecls` are declared in the
    element using the key as the prefix and the value as the namespace name. If
    `nsdecls` is not provided, a single namespace declaration is added based on the
    prefix on `nsptag_str`.
    N)attribr	   )r   r	   r   makeelement
clark_name)r!   r"   r$   nsptagr   r   r   OxmlElement*   s   r)   )r   r   r   r   )r   r   r   r   )NN)r!   r   r"   r#   r$   r#   r   r
   )__doc__
__future__r   typingr   r   r   r   lxmlr   docx.oxml.nsr   r	   docx.oxml.xmlchemyr
   ElementNamespaceClassLookupr   	XMLParserr   set_element_class_lookupr   r    r)   r   r   r   r   <module>   s    


	