o
    fc0                     @   s   d Z ddlZddlZddlmZ g dZG dd dZG dd dZd	d
 Z	G dd de
ZG dd de
ZG dd dZ[G dd dZG dd dZdS )z4Implementation of the DOM Level 3 'LS-Load' feature.    N)
NodeFilter)
DOMBuilderDOMEntityResolverDOMInputSourcec                   @   s\   e Zd ZdZdZdZdZdZdZdZ	dZ
dZdZdZdZdZdZdZdZdZdZdZdZdS )OptionszFeatures object that has variables set for each DOMBuilder feature.

    The DOMBuilder class uses an instance of this class to pass settings to
    the ExpatBuilder class.
       TFN)__name__
__module____qualname____doc__
namespacesnamespace_declarations
validationexternal_parameter_entitiesexternal_general_entitiesexternal_dtd_subsetvalidate_if_schemavalidatedatatype_normalizationcreate_entity_ref_nodesentitieswhitespace_in_element_contentcdata_sectionscommentscharset_overrides_xml_encodinginfosetsupported_mediatypes_onlyerrorHandlerfilter r   r   )/usr/lib/python3.10/xml/dom/xmlbuilder.pyr      s*    	r   c                
   @   s`  e Zd ZdZdZdZdZdZdZdZ	eeee	fZ
dd Zdd	 Zd
d Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zi ddgddgddgddgddgddgd d gd!d!gd"d"gd#d#gd$d"d$gd%d%gd&d&gd'd'gd(d(gd)d)gd*d*gd+gd,gd-gg g d.d/gd0gd1gd2Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< ZdS )=r   Nr            c                 C   s   t  | _d S N)r   _optionsselfr   r   r    __init__9   s   zDOMBuilder.__init__c                 C      | j S r$   entityResolverr&   r   r   r    _get_entityResolver<      zDOMBuilder._get_entityResolverc                 C   
   || _ d S r$   r*   )r'   r+   r   r   r    _set_entityResolver>      
zDOMBuilder._set_entityResolverc                 C   r)   r$   r   r&   r   r   r    _get_errorHandlerA   r-   zDOMBuilder._get_errorHandlerc                 C   r.   r$   r1   )r'   r   r   r   r    _set_errorHandlerC   r0   zDOMBuilder._set_errorHandlerc                 C   r)   r$   r   r&   r   r   r    _get_filterF   r-   zDOMBuilder._get_filterc                 C   r.   r$   r4   )r'   r   r   r   r    _set_filterH   r0   zDOMBuilder._set_filterc                 C   s   |  |r8|r	dp
d}z| jt||f }W n ty'   tjd|f d w |D ]\}}t| j|| q*d S tj	dt
| )Nr   r   zunsupported feature: %rzunknown feature: )supportsFeature	_settings_name_xformKeyErrorxmldomNotSupportedErrsetattrr%   NotFoundErrrepr)r'   namestatesettingsvaluer   r   r    
setFeatureK   s   
zDOMBuilder.setFeaturec                 C   s   t | jt|S r$   )hasattrr%   r9   )r'   rA   r   r   r    r7   Y      zDOMBuilder.supportsFeaturec                 C   s   t ||rdpdf}|| jv S )Nr   r   )r9   r8   )r'   rA   rB   keyr   r   r    canSetFeature\   s   
zDOMBuilder.canSetFeaturer   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   r   r   r   r   )r   r   r   r   )r   r   )r   r   r   r   r   r   )r   r   )r   r   r   r   r   r   r   r   )	rJ   rK   rL   rM   rO   )r   r   rN   rP   rR   r   r   r   r   r   r   )rP   rQ   rR   )r   r   )r   r   rS   rT   rU   c                 C   s   t |}zt| j|W S  tyA   |dkr7| j}|jo4|jo4|jo4|jo4|jp3|j	p3|j
p3|jp3|j  Y S tjdt| w )Nr   zfeature %s not known)r9   getattrr%   AttributeErrorr   r   r   r   r   r   r   r   r   r;   r<   r?   r@   )r'   rA   xnameoptionsr   r   r    
getFeature   s2   	zDOMBuilder.getFeaturec                 C   s.   | j r| j d |}nt d |}| |S r$   )r+   resolveEntityr   parse)r'   uriinputr   r   r    parseURI   s   
zDOMBuilder.parseURIc                 C   sR   t  | j}| j|_| j|_|j}|d u r#|jr#dd l}|j|j}| 	||S Nr   )
copyr%   r   r   
byteStreamsystemIdurllib.requestrequesturlopen_parse_bytestream)r'   r^   rY   fpurllibr   r   r    r\      s   zDOMBuilder.parsec                 C   s   || j vr	tdtd)Nznot a legal actionzHaven't written this yet...)_legal_actions
ValueErrorNotImplementedError)r'   r^   cnodeactionr   r   r    parseWithContext   s   
zDOMBuilder.parseWithContextc                 C   s    dd l }|jj|}||S r`   )xml.dom.expatbuilderr<   expatbuildermakeBuilder	parseFile)r'   streamrY   r;   builderr   r   r    rg      s   
zDOMBuilder._parse_bytestream)r   r	   r
   r+   r   r   ACTION_REPLACEACTION_APPEND_AS_CHILDRENACTION_INSERT_AFTERACTION_INSERT_BEFORErj   r(   r,   r/   r2   r3   r5   r6   rE   r7   rI   r8   rZ   r_   r\   ro   rg   r   r   r   r    r   ,   s    		 "%=
r   c                 C   s   |   ddS )N-_)lowerreplace)rA   r   r   r    r9      rG   r9   c                   @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )r   )_openerc                 C   s   |d usJ t  }||_||_|  ||_| ||_dd l}dd l	}|j
|}|\}}}	}
}}|	rP|	dsP||	d }	|||	|
||f}|j
||_|S )Nr   /)r   publicIdrc   _get_openeropenrb   _guess_media_encodingencoding	posixpathurllib.parser\   urlparseendswithdirname
urlunparsebaseURI)r'   r   rc   sourcer   ri   partsschemenetlocpathparamsqueryfragmentr   r   r    r[      s   zDOMEntityResolver.resolveEntityc                 C   s,   z| j W S  ty   |  | _ | j  Y S w r$   )r~   rW   _create_openerr&   r   r   r    r      s   

zDOMEntityResolver._get_openerc                 C   s   dd l }|j S r`   )rd   re   build_opener)r'   ri   r   r   r    r      s   
z DOMEntityResolver._create_openerc                 C   sJ   |j  }d|v r!| D ]}|dr |ddd    S qd S d S )NzContent-Typezcharset==r   )rb   infogetplist
startswithsplitr|   )r'   r   r   paramr   r   r    r      s   

z'DOMEntityResolver._guess_media_encodingN)r   r	   r
   	__slots__r[   r   r   r   r   r   r   r    r      s    r   c                   @   s   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd S )!r   rb   characterStream
stringDatar   r   rc   r   c                 C   s.   d | _ d | _d | _d | _d | _d | _d | _d S r$   r   r&   r   r   r    r(     s   
zDOMInputSource.__init__c                 C   r)   r$   rb   r&   r   r   r    _get_byteStream  r-   zDOMInputSource._get_byteStreamc                 C   r.   r$   r   )r'   rb   r   r   r    _set_byteStream  r0   zDOMInputSource._set_byteStreamc                 C   r)   r$   r   r&   r   r   r    _get_characterStream  r-   z#DOMInputSource._get_characterStreamc                 C   r.   r$   r   )r'   r   r   r   r    _set_characterStream  r0   z#DOMInputSource._set_characterStreamc                 C   r)   r$   r   r&   r   r   r    _get_stringData  r-   zDOMInputSource._get_stringDatac                 C   r.   r$   r   )r'   datar   r   r    _set_stringData  r0   zDOMInputSource._set_stringDatac                 C   r)   r$   r   r&   r   r   r    _get_encoding  r-   zDOMInputSource._get_encodingc                 C   r.   r$   r   )r'   r   r   r   r    _set_encoding  r0   zDOMInputSource._set_encodingc                 C   r)   r$   r   r&   r   r   r    _get_publicId!  r-   zDOMInputSource._get_publicIdc                 C   r.   r$   r   )r'   r   r   r   r    _set_publicId#  r0   zDOMInputSource._set_publicIdc                 C   r)   r$   rc   r&   r   r   r    _get_systemId&  r-   zDOMInputSource._get_systemIdc                 C   r.   r$   r   )r'   rc   r   r   r    _set_systemId(  r0   zDOMInputSource._set_systemIdc                 C   r)   r$   r   r&   r   r   r    _get_baseURI+  r-   zDOMInputSource._get_baseURIc                 C   r.   r$   r   r'   r]   r   r   r    _set_baseURI-  r0   zDOMInputSource._set_baseURIN)r   r	   r
   r   r(   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r      s"    	r   c                   @   s>   e Zd ZdZdZdZdZdZej	Z
dd Zdd	 Zd
d ZdS )DOMBuilderFilterzSElement filter which can be used to tailor construction of
    a DOM instance.
    r   r!   r"   r#   c                 C   r)   r$   )
whatToShowr&   r   r   r    _get_whatToShowB  r-   z DOMBuilderFilter._get_whatToShowc                 C   r)   r$   FILTER_ACCEPTr'   elementr   r   r    
acceptNodeE  r-   zDOMBuilderFilter.acceptNodec                 C   r)   r$   r   r   r   r   r    startContainerH  r-   zDOMBuilderFilter.startContainerN)r   r	   r
   r   r   FILTER_REJECTFILTER_SKIPFILTER_INTERRUPTr   SHOW_ALLr   r   r   r   r   r   r   r    r   1  s    	r   c                   @   sD   e Zd ZdZdZdd Zdd Zdd Zd	d
 Zdd Z	dd Z
dS )
DocumentLSz=Mixin to create documents that conform to the load/save spec.Fc                 C   s   dS )NFr   r&   r   r   r    
_get_asyncS  s   zDocumentLS._get_asyncc                 C   s   |rt jdd S )Nz.asynchronous document loading is not supported)r;   r<   r=   )r'   flagr   r   r    
_set_asyncV  s
   zDocumentLS._set_asyncc                 C      t d)Nz'haven't figured out what this means yetrl   r&   r   r   r    abort[  s   zDocumentLS.abortc                 C   r   Nzhaven't written this yetr   r   r   r   r    loada     zDocumentLS.loadc                 C   r   r   r   )r'   r   r   r   r    loadXMLd  r   zDocumentLS.loadXMLc                 C   s0   |d u r
| }| S |j | urtj | S r$   )ownerDocumentr;   r<   WrongDocumentErrtoxml)r'   snoder   r   r    saveXMLg  s   

zDocumentLS.saveXMLN)r   r	   r
   r   async_r   r   r   r   r   r   r   r   r   r    r   N  s    r   c                   @   s,   e Zd ZdZdZdd Zdd Zdd Zd	S )
DOMImplementationLSr   r!   c                 C   sB   |d ur
t jd|| jkrt S || jkrt jdtd)NzschemaType not yet supportedz'asynchronous builders are not supportedzunknown value for mode)r;   r<   r=   MODE_SYNCHRONOUSr   MODE_ASYNCHRONOUSrk   )r'   mode
schemaTyper   r   r    createDOMBuilders  s   

z$DOMImplementationLS.createDOMBuilderc                 C   r   )Nz-the writer interface hasn't been written yet!r   r&   r   r   r    createDOMWriter~  s   z#DOMImplementationLS.createDOMWriterc                 C   s   t  S r$   )r   r&   r   r   r    createDOMInputSource  r-   z(DOMImplementationLS.createDOMInputSourceN)r   r	   r
   r   r   r   r   r   r   r   r   r    r   o  s    r   )r   ra   xml.domr;   xml.dom.NodeFilterr   __all__r   r   r9   objectr   r   r   r   r   r   r   r   r    <module>   s      %,1!